#edi #energy #bdew

bo4e

BO4E (Business Objects for Energy) - Rust implementation

3 unstable releases

0.2.0 Mar 3, 2026
0.1.1 Jan 20, 2026
0.1.0 Jan 20, 2026

#1146 in Data structures

MIT license

1MB
17K SLoC

BO4E - Business Objects for Energy

Rust implementation of the BO4E standard for data exchange in the German energy industry.

Quick Start

use bo4e::prelude::*;

// Create a meter
let meter = Meter {
    meter_number: Some("1EMH0012345678".to_string()),
    division: Some(Division::Electricity),
    meter_type: Some(MeterType::ModernMeasuringDevice),
    ..Default::default()
};

// Serialize to German JSON (BO4E standard)
let json = to_json_german(&meter).unwrap();
println!("{}", json);

// Deserialize
let mut bytes = json.into_bytes();
let parsed: Meter = from_json(&mut bytes).unwrap();
assert_eq!(parsed.meter_number, Some("1EMH0012345678".to_string()));

Crate Structure

  • [bo] - Business Objects (Meter, MarketLocation, Contract, etc.)
  • [com] - Components (Address, Price, MeterReading, etc.)
  • enums - Enumerations (Division, MeterType, ContractStatus, etc.)

Serialization

BO4E uses German field names in JSON by default to maintain compatibility with the standard. Use to_json_english for English field names.

use bo4e::prelude::*;

let meter = Meter::default();

// German (standard)
let german = to_json_german(&meter).unwrap();

// English
let english = to_json_english(&meter).unwrap();

Performance

This crate uses simd-json for SIMD-accelerated JSON parsing. For best performance, use from_json with a mutable byte slice.

Dependencies

~4.5–6MB
~106K SLoC