Skip to main content

Module codegen

Module codegen 

Source
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§

EnrichedFunctionInfo
Merges Move source information with ABI function parameters.
EnrichedParam
A parameter with both name and type information.
GeneratorConfig
Configuration for code generation.
ModuleGenerator
Generates Rust code from a Move module ABI.
MoveFunctionInfo
Information extracted from a Move function definition.
MoveModuleInfo
Information extracted from a Move module.
MoveSourceParser
Parses Move source code to extract metadata.
MoveStructInfo
Information extracted from a Move struct definition.
MoveTypeMapper
Maps Move types to Rust types.
RustType
A Rust type representation.

Functions§

to_pascal_case
Converts a snake_case or other string to PascalCase.
to_snake_case
Converts a PascalCase or other string to snake_case.