1use databuf_derive_impl::{
2 quote2::{quote, Quote},
3 syn::DeriveInput,
4 Expand, *,
5};
6use proc_macro::TokenStream;
7use proc_macro2::TokenStream as TokenStream2;
8use syn::parse_macro_input;
9
10fn expand<F>(input: TokenStream, f: F) -> TokenStream
11where
12 F: FnOnce(Expand),
13{
14 let input: DeriveInput = parse_macro_input!(input);
15 let mut output = TokenStream2::new();
16 let mut crate_path = TokenStream2::new();
17
18 quote!(crate_path, { ::databuf });
19 f(Expand::new(crate_path, &input, &mut output));
20 TokenStream::from(output)
21}
22
23#[proc_macro_derive(Encode)]
24pub fn encode(input: TokenStream) -> TokenStream {
25 expand(input, |mut expend| expend.encoder())
26}
27
28#[proc_macro_derive(Decode)]
29pub fn decode(input: TokenStream) -> TokenStream {
30 expand(input, |mut expend| expend.decoder())
31}