extern crate proc_macro;
extern crate quote;
extern crate syn;
#[allow(dead_code)]
pub(crate) mod attrs;
pub(crate) mod impls {
#[doc(inline)]
pub use self::{gsw::*, wrapper::*};
mod gsw;
mod wrapper;
}
use proc_macro::TokenStream;
use syn::{DeriveInput, parse_macro_input};
#[proc_macro_derive(Wrapper, attributes(wrap))]
pub fn wrapper(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
let res = impls::impl_wrapper(&ast);
res.into()
}
#[proc_macro_derive(Get, attributes(gsw))]
pub fn get(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
let res = impls::impl_get(&ast);
res.into()
}
#[proc_macro_derive(SetWith, attributes(gsw))]
pub fn set(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
let res = impls::impl_wrapper(&ast);
res.into()
}