42 releases (12 breaking)
Uses new Rust 2024
| new 0.46.1 | May 6, 2026 |
|---|---|
| 0.44.7 | Apr 14, 2026 |
| 0.44.5 | Mar 16, 2026 |
| 0.41.0 | Dec 31, 2025 |
| 0.28.0 | Jul 25, 2025 |
#2998 in Encoding
525KB
10K
SLoC
facet-xdr
XDR (External Data Representation) format support via facet-format.
XDR is a binary format defined in RFC 4506 for encoding structured data. It is primarily used in Sun RPC (ONC RPC) protocols.
Key characteristics:
- Big-endian byte order
- Fixed-size integers (4 bytes for i32/u32, 8 bytes for i64/u64)
- No support for i128/u128
- Strings are length-prefixed with 4-byte aligned padding
- Arrays have explicit length prefixes
Serialization
use facet::Facet;
use facet_xdr::to_vec;
#[derive(Facet)]
struct Point { x: i32, y: i32 }
let point = Point { x: 10, y: 20 };
let bytes = to_vec(&point).unwrap();
Deserialization
use facet::Facet;
use facet_xdr::from_slice;
#[derive(Facet, Debug, PartialEq)]
struct Point { x: i32, y: i32 }
// XDR encoding of Point { x: 10, y: 20 }
let bytes = &[0, 0, 0, 10, 0, 0, 0, 20];
let point: Point = from_slice(bytes).unwrap();
assert_eq!(point.x, 10);
assert_eq!(point.y, 20);
Dependencies
~3MB
~55K SLoC