1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
use proc_macro::TokenStream;
use quote::quote;
use syn::ItemFn;
use crate::common::{self, define::Expanded};
use super::args::FunctionMacroArgs;
pub(crate) fn expand(attrs: FunctionMacroArgs, input: ItemFn) -> TokenStream {
let Expanded {
name_str,
validator,
validator_name,
evaluator,
evaluator_name,
result,
core,
} = match common::define::expand(input, attrs.name) {
Ok(exp) => exp,
Err(err) => return err.into(),
};
let inventory = quote! {
::serde_json_path_macros::inventory
};
TokenStream::from(quote! {
#validator
#evaluator
#inventory::submit! {
#core::Function::new(
#name_str,
#result::function_type(),
&#evaluator_name,
&#validator_name,
)
}
})
}
|