Expand description
Code generation for Move modules.
This module provides utilities to generate type-safe Rust code from Move module ABIs.
§Overview
The code generator can create:
- Entry function wrappers with typed arguments
- View function wrappers with typed returns
- Struct definitions matching Move structs
- Event types for parsing on-chain events
§Runtime Code Generation
ⓘ
use aptos_sdk::codegen::{ModuleGenerator, GeneratorConfig};
use aptos_sdk::api::response::MoveModuleABI;
// Load ABI from file or API
let abi_json = std::fs::read_to_string("my_module_abi.json")?;
let abi: MoveModuleABI = serde_json::from_str(&abi_json)?;
// Generate code
let generator = ModuleGenerator::new(&abi, GeneratorConfig::default());
let code = generator.generate()?;
// Write to file
std::fs::write("src/generated/my_module.rs", code)?;§Build-Time Code Generation
For compile-time code generation, use the build_helper module in your build.rs:
ⓘ
// build.rs
use aptos_sdk::codegen::build_helper;
fn main() {
// Generate from local ABI files
build_helper::generate_from_abi(
"abi/my_module.json",
"src/generated/",
).expect("code generation failed");
// Or generate from a directory of ABIs
build_helper::generate_from_directory(
"abi/",
"src/generated/",
).expect("code generation failed");
println!("cargo:rerun-if-changed=abi/");
}§With Move Source (Better Parameter Names)
ⓘ
use aptos_sdk::codegen::{ModuleGenerator, GeneratorConfig, MoveSourceParser};
// Load ABI
let abi: MoveModuleABI = serde_json::from_str(&abi_json)?;
// Parse Move source for parameter names and docs
let move_source = std::fs::read_to_string("sources/my_module.move")?;
let source_info = MoveSourceParser::parse(&move_source);
// Generate with enriched information
let generator = ModuleGenerator::new(&abi, GeneratorConfig::default())
.with_source_info(source_info);
let code = generator.generate()?;§CLI Usage
# Generate from a local ABI file
aptos-codegen --input my_module_abi.json --output src/generated/
# Generate from on-chain module with Move source
aptos-codegen --module 0x1::coin --network testnet --source coin.move --output src/
# Generate from a directory of ABIs
aptos-codegen --input-dir abi/ --output src/generated/Modules§
- build_
helper - Build script helper for code generation.
Structs§
- Enriched
Function Info - Merges Move source information with ABI function parameters.
- Enriched
Param - A parameter with both name and type information.
- Generator
Config - Configuration for code generation.
- Module
Generator - Generates Rust code from a Move module ABI.
- Move
Function Info - Information extracted from a Move function definition.
- Move
Module Info - Information extracted from a Move module.
- Move
Source Parser - Parses Move source code to extract metadata.
- Move
Struct Info - Information extracted from a Move struct definition.
- Move
Type Mapper - Maps Move types to Rust types.
- Rust
Type - A Rust type representation.
Functions§
- to_
pascal_ case - Converts a
snake_caseor other string toPascalCase. - to_
snake_ case - Converts a
PascalCaseor other string tosnake_case.