1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
use quote::quote;
use syn::{
self, bracketed,
parse::{Parse, ParseStream},
parse_macro_input,
punctuated::Punctuated,
token, Expr, Result, Token,
};
#[derive(Debug)]
struct Sync {
name: Expr,
token: Token![,],
brace_token: token::Bracket,
fields: Punctuated<Expr, Token![,]>,
}
impl Parse for Sync {
fn parse(input: ParseStream) -> Result<Self> {
let content;
Ok(Sync {
name: input.parse()?,
token: input.parse()?,
brace_token: bracketed!(content in input),
fields: content.parse_terminated(Expr::parse)?,
})
}
}
pub fn sync(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = parse_macro_input!(input as Sync);
let name = input.name;
let values = input.fields.iter();
let gen = quote! {
self.send_sync(
#name,
vec![#(#values.into()),*],
)
};
gen.into()
}
|