ergo-sbe 0.1.12

Opinionated, idiomatic Rust code generation for Simple Binary Encoding.
Documentation

ergo-sbe

Crates.io CI API Docs Book

ergo-sbe generates binary-compatible Rust SBE codecs with compile-time wire-order enforcement, closure-based groups, exact buffer sizing, and zero heap allocation on hot paths.

AI assistance. Large parts of this project were written with heavy AI assistance. Humans directed the work, approved designs, and ran verification. Details: AI-ASSISTANCE.md.

Full documentation

ergo-sbe book is the comprehensive guide for ergo-sbe (also linked from this crate on docs.rs):

  • Getting Started — depend, generate, encode, decode
  • Feature Tour — exact sizing, bulk arrays, decode stages, DTOs, trust boundaries
  • Core Concepts — wire order, buffer sizing, composites, flyweight vs struct
  • Configurationwith_conversion vs with_domain_type, hooks
  • Recipes — Display/Debug, schema→rustdoc, domain DTOs, timestamps
  • Benchmarks — parity methodology and gates

Compatibility profile (normative): docs/SBE_COMPATIBILITY.md — do not claim unqualified “SBE binary compatibility.”

0.1 → 0.1.10 migration: docs/MIGRATION_0_1_TO_0_1_10.md — fallible wrap / decode, try_wrap* removed; private *_unchecked cores until HFT-008 keep.

Quick Example

use ergo_sbe::{parse, Schema, Generator, GenerationConfig};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let xml = r#"<?xml version="1.0"?>
    <messageSchema package="demo" id="1" version="0" byteOrder="littleEndian">
      <types>
        <composite name="messageHeader">
          <type name="blockLength" primitiveType="uint16"/>
          <type name="templateId" primitiveType="uint16"/>
          <type name="schemaId" primitiveType="uint16"/>
          <type name="version" primitiveType="uint16"/>
        </composite>
      </types>
      <message name="Ping" id="1" blockLength="4">
        <field name="seq" id="1" type="uint32" offset="0"/>
      </message>
    </messageSchema>"#;

    let ir = parse(xml)?;
    let schema = Schema::from_ir(ir);
    let modules = Generator::new(GenerationConfig::new("demo_msgs"))
        .generate(&schema)?;
    // In a real project you'd use a build script.
    // Full guide: https://mimran1980.github.io/ergon/sbe/getting-started.html
    // Checked encode (0.1.10): MessageEncoder::wrap_and_apply_header(buf, 0)?
    // Public zero-check twins ship only after HFT-008 keep=true evidence.
    let _ = modules;
    Ok(())
}

API Reference

docs.rs/ergo-sbe — generated Rustdoc for the published crate.

License

Apache-2.0.