etanol_macros/
lib.rs

1use proc_macro::TokenStream;
2
3#[proc_macro]
4pub fn impl_value_trait(item: TokenStream) -> TokenStream {
5    let data = format!(
6        r"
7        impl Value for {} {{
8            fn toValue(&self, _default: Option<String>) -> String {{
9                self.to_string().clone()
10            }}             
11        }}
12    ",
13        item.to_string()
14    );
15
16    data.parse().unwrap()
17}
18
19#[proc_macro]
20pub fn impl_value_trait_option(item: TokenStream) -> TokenStream {
21    let data = format!(
22        r"
23        impl Value for Option<{}> {{
24            fn toValue(&self, _default: Option<String>) -> String {{ 
25                match self {{ 
26                    Some(value) => value.to_string(),
27                    None => {{ 
28                        if let Some(value) = _default {{ 
29                            value.to_string()
30                        }} else {{
31                            {}.to_string()
32                        }}
33                    }}
34                }}
35            }}
36        }}
37    ",
38        item.to_string(),
39        "\"None\""
40    );
41
42    data.parse().unwrap()
43}