anchor_syn/codegen/program/
mod.rs1use crate::Program;
2use quote::quote;
3
4mod accounts;
5pub mod common;
6mod cpi;
7mod dispatch;
8mod entry;
9mod handlers;
10mod idl;
11mod instruction;
12
13pub fn generate(program: &Program) -> proc_macro2::TokenStream {
14 let mod_name = &program.name;
15
16 let entry = entry::generate(program);
17 let dispatch = dispatch::generate(program);
18 let handlers = handlers::generate(program);
19 let user_defined_program = &program.program_mod;
20 let instruction = instruction::generate(program);
21 let cpi = cpi::generate(program);
22 let accounts = accounts::generate(program);
23
24 #[allow(clippy::let_and_return)]
25 let ret = {
26 quote! {
27 use self::#mod_name::*;
29
30 #entry
31 #dispatch
32 #handlers
33 #user_defined_program
34 #instruction
35 #cpi
36 #accounts
37 }
38 };
39
40 #[cfg(feature = "idl-build")]
41 {
42 let idl_build_impl = crate::idl::gen_idl_print_fn_program(program);
43 return quote! {
44 #ret
45 #idl_build_impl
46 };
47 };
48
49 #[allow(unreachable_code)]
50 ret
51}