Skip to main content

aptos_sdk/codegen/
mod.rs

1//! Code generation for Move modules.
2//!
3//! This module provides utilities to generate type-safe Rust code from Move module ABIs.
4//!
5//! # Overview
6//!
7//! The code generator can create:
8//! - Entry function wrappers with typed arguments
9//! - View function wrappers with typed returns
10//! - Struct definitions matching Move structs
11//! - Event types for parsing on-chain events
12//!
13//! # Runtime Code Generation
14//!
15//! ```rust,ignore
16//! use aptos_sdk::codegen::{ModuleGenerator, GeneratorConfig};
17//! use aptos_sdk::api::response::MoveModuleABI;
18//!
19//! // Load ABI from file or API
20//! let abi_json = std::fs::read_to_string("my_module_abi.json")?;
21//! let abi: MoveModuleABI = serde_json::from_str(&abi_json)?;
22//!
23//! // Generate code
24//! let generator = ModuleGenerator::new(&abi, GeneratorConfig::default());
25//! let code = generator.generate()?;
26//!
27//! // Write to file
28//! std::fs::write("src/generated/my_module.rs", code)?;
29//! ```
30//!
31//! # Build-Time Code Generation
32//!
33//! For compile-time code generation, use the `build_helper` module in your `build.rs`:
34//!
35//! ```rust,ignore
36//! // build.rs
37//! use aptos_sdk::codegen::build_helper;
38//!
39//! fn main() {
40//!     // Generate from local ABI files
41//!     build_helper::generate_from_abi(
42//!         "abi/my_module.json",
43//!         "src/generated/",
44//!     ).expect("code generation failed");
45//!
46//!     // Or generate from a directory of ABIs
47//!     build_helper::generate_from_directory(
48//!         "abi/",
49//!         "src/generated/",
50//!     ).expect("code generation failed");
51//!
52//!     println!("cargo:rerun-if-changed=abi/");
53//! }
54//! ```
55//!
56//! # With Move Source (Better Parameter Names)
57//!
58//! ```rust,ignore
59//! use aptos_sdk::codegen::{ModuleGenerator, GeneratorConfig, MoveSourceParser};
60//!
61//! // Load ABI
62//! let abi: MoveModuleABI = serde_json::from_str(&abi_json)?;
63//!
64//! // Parse Move source for parameter names and docs
65//! let move_source = std::fs::read_to_string("sources/my_module.move")?;
66//! let source_info = MoveSourceParser::parse(&move_source);
67//!
68//! // Generate with enriched information
69//! let generator = ModuleGenerator::new(&abi, GeneratorConfig::default())
70//!     .with_source_info(source_info);
71//! let code = generator.generate()?;
72//! ```
73//!
74//! # CLI Usage
75//!
76//! ```bash
77//! # Generate from a local ABI file
78//! aptos-codegen --input my_module_abi.json --output src/generated/
79//!
80//! # Generate from on-chain module with Move source
81//! aptos-codegen --module 0x1::coin --network testnet --source coin.move --output src/
82//!
83//! # Generate from a directory of ABIs
84//! aptos-codegen --input-dir abi/ --output src/generated/
85//! ```
86
87pub mod build_helper;
88mod generator;
89mod move_parser;
90mod types;
91
92pub use generator::{GeneratorConfig, ModuleGenerator};
93pub use move_parser::{
94    EnrichedFunctionInfo, EnrichedParam, MoveFunctionInfo, MoveModuleInfo, MoveSourceParser,
95    MoveStructInfo,
96};
97pub use types::{MoveTypeMapper, RustType, to_pascal_case, to_snake_case};