Expand description
Record and field structures for LNMP data.
§Field Ordering
LnmpRecord stores fields internally in a Vec, maintaining insertion order.
However, for deterministic behavior and canonical representation, use sorted_fields():
use lnmp_core::{LnmpRecord, LnmpField, LnmpValue};
let mut record = LnmpRecord::new();
record.add_field(LnmpField { fid: 23, value: LnmpValue::Int(3) });
record.add_field(LnmpField { fid: 7, value: LnmpValue::Int(1) });
record.add_field(LnmpField { fid: 12, value: LnmpValue::Int(2) });
// Insertion order (non-deterministic across different constructions)
assert_eq!(record.fields()[0].fid, 23);
assert_eq!(record.fields()[1].fid, 7);
assert_eq!(record.fields()[2].fid, 12);
// Canonical order (deterministic, sorted by FID)
let sorted = record.sorted_fields();
assert_eq!(sorted[0].fid, 7);
assert_eq!(sorted[1].fid, 12);
assert_eq!(sorted[2].fid, 23);§When to Use Each
-
fields(): When insertion order is semantically important- Direct iteration over fields as added
- Structural equality (order-sensitive)
-
sorted_fields(): For canonical representation- Encoding (text/binary)
- Checksum computation
- Semantic comparison (order-independent)
- Deterministic output
§Deterministic Guarantees
The following components always use sorted_fields() for determinism:
SemanticChecksum::serialize_value()- Field-order-independent checksums- All encoders in
lnmp-codec- Canonical output - Binary format - Sorted fields for stable round-trips
This ensures that two records with the same fields but different insertion orders will produce identical checksums and encodings.
Structs§
- Field
Ordering Error - Error returned when field ordering validation fails
- Lnmp
Field - A single field assignment (field ID + value pair)
- Lnmp
Record - A complete LNMP record (collection of fields)