tupiter_proc_macro/
lib.rs

1use ::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}