tupiter_proc_macro/
lib.rs1use ::core::str::FromStr;
2use proc_macro::{TokenStream, TokenTree};
3
4#[proc_macro]
5pub fn decl_for_range(input: TokenStream) -> TokenStream {
6 let mut trees = input.into_iter();
7 let n: usize = match trees.next().expect("expected integer literal") {
8 TokenTree::Literal(x) => x.to_string().parse().expect("expected integer literal"),
9 _ => panic!("expected integer literal"),
10 };
11 let mut code = String::new();
12 for x in 1..n {
13 let name = format!("Tuple{}Iter", x);
14 code.push_str(&format!(
15 "decl_tuple_iter_struct!({} | {});",
16 &name,
17 (0..x).map(|x| x.to_string()).collect::<Vec<_>>().join(", ")
18 ));
19 }
20 TokenStream::from_str(&code).unwrap()
21}