123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- use crate::Program;
- use quote::quote;
- mod accounts;
- pub mod common;
- mod cpi;
- mod dispatch;
- mod entry;
- mod handlers;
- mod idl;
- mod instruction;
- pub fn generate(program: &Program) -> proc_macro2::TokenStream {
- let mod_name = &program.name;
- let entry = entry::generate(program);
- let dispatch = dispatch::generate(program);
- let handlers = handlers::generate(program);
- let user_defined_program = &program.program_mod;
- let instruction = instruction::generate(program);
- let cpi = cpi::generate(program);
- let accounts = accounts::generate(program);
- #[allow(clippy::let_and_return)]
- let ret = {
- quote! {
- // TODO: remove once we allow segmented paths in `Accounts` structs.
- use self::#mod_name::*;
- #entry
- #dispatch
- #handlers
- #user_defined_program
- #instruction
- #cpi
- #accounts
- }
- };
- #[cfg(feature = "idl-build")]
- {
- let idl_build_impl = crate::idl::gen_idl_print_fn_program(program);
- return quote! {
- #ret
- #idl_build_impl
- };
- };
- #[allow(unreachable_code)]
- ret
- }
|