ndk_macro/
lib.rs

1use darling::FromMeta;
2use proc_macro::TokenStream;
3use syn::{parse_macro_input, ItemFn};
4
5mod expand;
6mod helper;
7mod parse;
8
9use helper::AttributeArgs;
10use parse::MainAttr;
11
12#[proc_macro_attribute]
13pub fn main(attr_input: TokenStream, item_input: TokenStream) -> TokenStream {
14    let item_ast = parse_macro_input!(item_input as ItemFn);
15    let attr_ast = parse_macro_input!(attr_input as AttributeArgs);
16    let attr: MainAttr = match FromMeta::from_list(&attr_ast) {
17        Ok(attr) => attr,
18        Err(errs) => return TokenStream::from(errs.write_errors()),
19    };
20
21    attr.expand(&item_ast).into()
22}