// SPDX-License-Identifier: GPL-2.0 use proc_macro::{token_stream, Ident, TokenStream, TokenTree}; use crate::helpers::expect_punct; fn expect_ident(it: &mut token_stream::IntoIter) -> Ident { if let Some(TokenTree::Ident(ident)) = it.next() { ident } else { panic!("Expected Ident") } } pub(crate) fn concat_idents(ts: TokenStream) -> TokenStream { let mut it = ts.into_iter(); let a = expect_ident(&mut it); assert_eq!(expect_punct(&mut it), ','); let b = expect_ident(&mut it); assert!(it.next().is_none(), "only two idents can be concatenated"); let res = Ident::new(&format!("{a}{b}"), b.span()); TokenStream::from_iter([TokenTree::Ident(res)]) }