| // 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)]) |
| } |