34 lines
792 B
Rust
34 lines
792 B
Rust
|
use proc_macro::TokenStream;
|
||
|
use proc_macro2::TokenStream as TokenStream2;
|
||
|
use quote::{format_ident, quote};
|
||
|
use syn::Ident;
|
||
|
|
||
|
use crate::InputInfo;
|
||
|
|
||
|
pub fn single_update(input: InputInfo) -> TokenStream {
|
||
|
let generate_inputs: Vec<Vec<Ident>> = (input.start..=input.end)
|
||
|
.map(|count| {
|
||
|
(input.start..(input.start + count))
|
||
|
.map(|i| format_ident!("t{}", i))
|
||
|
.collect()
|
||
|
})
|
||
|
.collect();
|
||
|
|
||
|
let invocations: Vec<TokenStream2> = generate_inputs
|
||
|
.iter()
|
||
|
.map(|t| {
|
||
|
let macro_ident = &input.macro_ident;
|
||
|
|
||
|
quote! {
|
||
|
#macro_ident!(#(#t,)*);
|
||
|
}
|
||
|
})
|
||
|
.collect();
|
||
|
|
||
|
TokenStream::from(quote! {
|
||
|
#(
|
||
|
#invocations
|
||
|
)*
|
||
|
})
|
||
|
}
|