Skip to main content

kaptn_syn/
lib.rs

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}