actr-web-protoc-codegen 0.3.1

Protoc plugin for generating actr-web code from protobuf definitions
Documentation

actr-web-protoc-codegen

Protoc code generator for creating actr-web code from Protobuf definitions.

Features

  • ✅ Generate Rust WASM actor code from .proto files
  • ✅ Generate TypeScript type definitions
  • ✅ Generate TypeScript ActorRef wrapper classes
  • ✅ Optionally generate React Hooks
  • 🔄 Automated code formatting
  • 🔄 Custom template support

Usage

Option 1: use it from build.rs (recommended)

// build.rs
fn main() {
    use actr_web_protoc_codegen::{WebCodegen, WebCodegenConfig};

    let config = WebCodegenConfig::builder()
        .proto_file("proto/echo.proto")
        .rust_output("src/generated")
        .ts_output("../packages/web-sdk/src/generated")
        .with_react_hooks(true)
        .include("proto")
        .build()
        .expect("Invalid config");

    WebCodegen::new(config)
        .generate()
        .expect("Failed to generate code");

    println!("cargo:rerun-if-changed=proto");
}

Option 2: use it through actr-cli

# Install `actr-cli` with web support
cargo install actr-cli --features web

# Generate code
actr gen --platform web \
  --input proto/ \
  --output crates/actors/src/generated/ \
  --ts-output packages/web-sdk/src/generated/ \
  --react-hooks

Option 3: use the programmatic API

use actr_web_protoc_codegen::{WebCodegen, WebCodegenConfig};

let config = WebCodegenConfig {
    proto_files: vec!["proto/echo.proto".into()],
    rust_output_dir: "src/generated".into(),
    ts_output_dir: "../web-sdk/src/generated".into(),
    generate_react_hooks: true,
    includes: vec!["proto".into()],
    format_code: true,
    custom_templates_dir: None,
};

let codegen = WebCodegen::new(config);
let files = codegen.generate()?;

// Write files
files.write_to_disk()?;

Generated Layout

Rust side (WASM)

src/generated/
├── mod.rs
├── echo.rs          # EchoActor
└── ...

TypeScript side

src/generated/
├── index.ts
├── echo.types.ts         # type definitions
├── echo.actor-ref.ts     # EchoActorRef class
├── use-echo.ts           # optional useEcho hook
└── ...

Configuration Options

Option Type Required Description
proto_files Vec<PathBuf> List of proto files
rust_output_dir PathBuf Rust output directory
ts_output_dir PathBuf TypeScript output directory
generate_react_hooks bool Generate React Hooks, default false
includes Vec<PathBuf> Proto include paths
format_code bool Format generated code, default false
custom_templates_dir Option<PathBuf> Custom template directory

Status

  • Base architecture and configuration
  • Full proto parsing with a handwritten parser
  • Rust actor method generation
  • TypeScript type generation
  • TypeScript ActorRef method generation
  • React Hooks generation
  • Streaming method support
  • Formatting integration with rustfmt and prettier/dprint
  • Unit tests
  • Optional prost-build integration
  • Custom template support
  • Integration tests
  • Performance tuning

Examples

See the example projects under examples/:

  • examples/echo/ - basic Echo service example
  • examples/simple-rpc/ - end-to-end RPC example

License

Apache License 2.0