summaryrefslogtreecommitdiffstats
path: root/rust/macros/concat_idents.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/macros/concat_idents.rs')
-rw-r--r--rust/macros/concat_idents.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/rust/macros/concat_idents.rs b/rust/macros/concat_idents.rs
new file mode 100644
index 000000000..47b6add37
--- /dev/null
+++ b/rust/macros/concat_idents.rs
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0
+
+use proc_macro2::{
+ Ident,
+ TokenStream,
+ TokenTree, //
+};
+use syn::{
+ parse::{
+ Parse,
+ ParseStream, //
+ },
+ Result,
+ Token, //
+};
+
+pub(crate) struct Input {
+ a: Ident,
+ _comma: Token![,],
+ b: Ident,
+}
+
+impl Parse for Input {
+ fn parse(input: ParseStream<'_>) -> Result<Self> {
+ Ok(Self {
+ a: input.parse()?,
+ _comma: input.parse()?,
+ b: input.parse()?,
+ })
+ }
+}
+
+pub(crate) fn concat_idents(Input { a, b, .. }: Input) -> TokenStream {
+ let res = Ident::new(&format!("{a}{b}"), b.span());
+ TokenStream::from_iter([TokenTree::Ident(res)])
+}