vexil-codegen-go 0.4.2

Go code generation backend for the Vexil schema compiler
Documentation

vexil-codegen-go

Go code generation backend for the Vexil schema compiler.

Takes a CompiledSchema from vexil-lang and emits Go structs, enums, and encode/decode functions. Generated code depends on github.com/vexil-lang/vexil/packages/runtime-go for bit-level I/O.

Single file

use vexil_lang::compile;
use vexil_codegen_go::generate;

let result = compile(source);
let compiled = result.compiled.expect("no errors");
let code: String = generate(&compiled)?;

Multi-file project

use vexil_lang::{compile_project, codegen::CodegenBackend};
use vexil_codegen_go::GoBackend;

let project = compile_project(&root_source, &root_path, &loader)?;
let files: Vec<(PathBuf, String)> = GoBackend.generate_project(&project)?;
// one .go file per schema + package-level organization

What gets generated

For each message: a Go struct with Pack/Unpack methods. For enums: typed constants with iota. For flags: a named integer type with bitwise helpers. For unions: an interface with per-variant concrete types. For @delta messages: a stateful encoder/decoder pair that transmits field-level deltas.

CLI usage

vexilc codegen schema.vexil --output out.go --target go
vexilc build root.vexil --include ./schemas --output ./generated --target go

Wire compatibility

Generated Go produces byte-identical output to the Rust and TypeScript backends. This is verified by the compliance vector suite.

License

Licensed under either of MIT or Apache-2.0 at your option.