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
#![allow(dead_code)]
extern crate proc_macro;
#[macro_use]
extern crate quote;
extern crate syn;
use proc_macro::TokenStream;
#[proc_macro_derive(getters)]
pub fn derive_getters(input: TokenStream) -> TokenStream {
let ast = syn::parse_macro_input(&input.to_string()).unwrap();
let expanded = expand_getters(ast);
println!("Expanded getters : {}", expanded.to_string());
expanded.to_string().parse().unwrap()
}
fn expand_getters(mut ast: syn::MacroInput) -> quote::Tokens {
quote! {
#ast
}
}
#[proc_macro_derive(setters)]
pub fn derive_setters(input: TokenStream) -> TokenStream {
let ast = syn::parse_macro_input(&input.to_string()).unwrap();
let expanded = expand_setters(ast);
println!("Expanded setters : {}", expanded.to_string());
expanded.to_string().parse().unwrap()
}
fn expand_setters(mut ast: syn::MacroInput) -> quote::Tokens {
quote! {
#ast
}
}