Skip to main content

houseflow_macros/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use syn::ItemFn;
4
5#[proc_macro_attribute]
6pub fn decoder(_args: TokenStream, item: TokenStream) -> TokenStream {
7    let mut input = syn::parse_macro_input!(item as ItemFn);
8    let attrs = &input.attrs;
9    let sig = &mut input.sig;
10    let vis = &input.vis;
11    let body = &input.block;
12
13    (quote! {
14        #(#attrs)*
15        #vis #sig {
16            if buf.remaining() < Self::MIN_SIZE {
17                return Err(DecodeError::InvalidSize {
18                    expected: Self::MIN_SIZE,
19                    received: buf.remaining(),
20                });
21            } else {
22                #body
23            }
24        }
25    })
26    .into()
27}