1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::ItemFn;
4
5mod codegen;
6mod parse;
7
8pub use parse::parse_transfer_hook_input;
9
10pub struct TransferHookInput {
11 pub fn_name: syn::Ident,
12 pub item_fn: ItemFn,
13}
14
15pub fn generate_transfer_hook_code(input: TransferHookInput) -> TokenStream {
16 generate(&input)
17}
18
19fn generate(program: &TransferHookInput) -> proc_macro2::TokenStream {
20 let entry = codegen::entry::generate(program);
21 let processor = codegen::processor::generate(program);
22 let user_defined_function = &program.item_fn;
23 let execute = codegen::execute::generate(program);
24 let initialize = codegen::initialize::generate(program);
25 let update = codegen::update::generate(program);
26
27 quote! {
28 #user_defined_function
29 #entry
30 #processor
31 #execute
32 #initialize
33 #update
34 }
35}