mod.rs 1.2 KB

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