1extern crate proc_macro;
7extern crate quote;
8extern crate syn;
9
10#[allow(dead_code)]
11pub(crate) mod attrs;
12
13pub(crate) mod impls {
14 #[doc(inline)]
15 pub use self::{gsw::*, wrapper::*};
16
17 mod gsw;
18 mod wrapper;
19}
20
21use proc_macro::TokenStream;
22use syn::{DeriveInput, parse_macro_input};
23
24#[proc_macro_derive(Wrapper, attributes(wrap))]
27pub fn wrapper(input: TokenStream) -> TokenStream {
28 let ast = parse_macro_input!(input as DeriveInput);
30
31 let res = impls::impl_wrapper(&ast);
33
34 res.into()
35}
36
37#[proc_macro_derive(Get, attributes(gsw))]
41pub fn get(input: TokenStream) -> TokenStream {
42 let ast = parse_macro_input!(input as DeriveInput);
44
45 let res = impls::impl_get(&ast);
47
48 res.into()
49}
50
51#[proc_macro_derive(SetWith, attributes(gsw))]
53pub fn set(input: TokenStream) -> TokenStream {
54 let ast = parse_macro_input!(input as DeriveInput);
56
57 let res = impls::impl_wrapper(&ast);
59
60 res.into()
61}