compose_derive/
lib.rs

1mod compose;
2
3use crate::compose::{transform_compose_fn, MacroArgs};
4use darling::FromMeta;
5use proc_macro::TokenStream;
6use syn::{parse_macro_input, AttributeArgs, ItemFn};
7
8#[proc_macro_attribute]
9pub fn compose(attr: TokenStream, item: TokenStream) -> TokenStream {
10    let attr = parse_macro_input!(attr as AttributeArgs);
11    let macro_args = match MacroArgs::from_list(&attr) {
12        Ok(v) => v,
13        Err(e) => {
14            return TokenStream::from(e.write_errors());
15        }
16    };
17
18    let func: ItemFn = parse_macro_input!(item as ItemFn);
19    transform_compose_fn(macro_args, func).into()
20}