Expand description
§senax-encoder
A fast, compact, and schema-evolution-friendly binary serialization library for Rust.
- Supports struct/enum encoding with field/variant IDs for forward/backward compatibility
- Efficient encoding for primitives, collections, Option, String, bytes, and popular crates (chrono, uuid, ulid, rust_decimal, indexmap, fxhash, ahash, smol_str)
- Custom derive macros for ergonomic usage
- Feature-gated support for optional dependencies
§Attribute Macros
You can control encoding/decoding behavior using the following attributes:
#[senax(id = N)]— Assigns a custom field or variant ID (u64). Ensures stable wire format across versions.#[senax(default)]— If a field is missing during decoding, its value is set toDefault::default()instead of causing an error. ForOption<T>, this meansNone.#[senax(skip_encode)]— This field is not written during encoding. On decode, it is set toDefault::default().#[senax(skip_decode)]— This field is ignored during decoding and always set toDefault::default(). It is still encoded if present.#[senax(skip_default)]— This field is not written during encoding if its value equals the default value. On decode, missing fields are set toDefault::default().#[senax(rename = "name")]— Use the given string as the logical field/variant name for ID calculation. Useful for renaming fields/variants while keeping the same wire format.
§Feature Flags
The following optional features enable support for popular crates and types:
chrono— Enables encoding/decoding ofchrono::DateTime,NaiveDate, andNaiveTimetypes.uuid— Enables encoding/decoding ofuuid::Uuid.ulid— Enables encoding/decoding ofulid::Ulid(shares the same tag as UUID for binary compatibility).rust_decimal— Enables encoding/decoding ofrust_decimal::Decimal.indexmap— Enables encoding/decoding ofIndexMapandIndexSetcollections.fxhash— Enables encoding/decoding offxhash::FxHashMapandfxhash::FxHashSet(fast hash collections).ahash— Enables encoding/decoding ofahash::AHashMapandahash::AHashSet(high-performance hash collections).smol_str— Enables encoding/decoding ofsmol_str::SmolStr(small string optimization).serde_json— Enables encoding/decoding ofserde_json::Value(JSON values as dynamic type).
§Example
use senax_encoder::{Encode, Decode};
use bytes::BytesMut;
#[derive(Encode, Decode, PartialEq, Debug)]
struct MyStruct {
id: u32,
name: String,
}
let value = MyStruct { id: 42, name: "hello".to_string() };
let mut buf = senax_encoder::encode(&value).unwrap();
let decoded: MyStruct = senax_encoder::decode(&mut buf).unwrap();
assert_eq!(value, decoded);Modules§
Enums§
- Encoder
Error - Error type for all encoding and decoding operations in this crate.
Traits§
- Decoder
- Trait for types that can be decoded from the senax binary format.
- Encoder
- Trait for types that can be encoded into the senax binary format.
Functions§
- decode
- Convenience function to decode a value from bytes.
- encode
- Convenience function to encode a value to bytes.
Type Aliases§
- Result
- The result type used throughout this crate for encode/decode operations.