pub trait Encoder {
// Required methods
fn encode(&self, writer: &mut BytesMut) -> Result<()>;
fn is_default(&self) -> bool;
// Provided method
fn pack(&self, writer: &mut BytesMut) -> Result<()> { ... }
}Expand description
Trait for types that can be encoded into the senax binary format.
Implement this trait for your type to enable serialization.
Most users should use #[derive(Encode)] instead of manual implementation.
§Errors
Returns EncoderError if the value cannot be encoded.
Required Methods§
Sourcefn encode(&self, writer: &mut BytesMut) -> Result<()>
fn encode(&self, writer: &mut BytesMut) -> Result<()>
Encode the value into the given buffer with schema evolution support.
This method includes field IDs and type tags for forward/backward compatibility. Use this when you need schema evolution support.
§Arguments
writer- The buffer to write the encoded bytes into.
Sourcefn is_default(&self) -> bool
fn is_default(&self) -> bool
Returns true if this value equals its default value.
Used by #[senax(skip_default)] attribute to skip encoding default values.
Provided Methods§
Sourcefn pack(&self, writer: &mut BytesMut) -> Result<()>
fn pack(&self, writer: &mut BytesMut) -> Result<()>
Pack the value into the given buffer without schema evolution support.
This method omits field IDs and some type tags for compact encoding. Fields are encoded in declaration order. Use this when you need maximum performance and compact size, but don’t need schema evolution.
§Arguments
writer- The buffer to write the packed bytes into.
§Note
- For structs: Field IDs are omitted, fields are encoded in declaration order
- For enums: Variant IDs are still included, but field IDs within variants are omitted
- For primitives: Some type tags may be omitted for maximum compactness
Implementations on Foreign Types§
Source§impl Encoder for bool
Encodes a bool as a single tag byte: TAG_ZERO for false, TAG_ONE for true.
impl Encoder for bool
Encodes a bool as a single tag byte: TAG_ZERO for false, TAG_ONE for true.
Source§impl Encoder for i8
Encodes signed integers using bit-inverted encoding for negative values.
impl Encoder for i8
Encodes signed integers using bit-inverted encoding for negative values.
- Non-negative values (>= 0) are encoded as unsigned integers
- Negative values use
TAG_NEGATIVEand bit-inverted encoding
Source§impl Encoder for u8
Encodes unsigned integers using a compact variable-length format.
impl Encoder for u8
Encodes unsigned integers using a compact variable-length format.
- Values 0/1 are encoded as
TAG_ZERO/TAG_ONE(1 byte) - 2..=127 are encoded as a single tag byte (1 byte)
- Larger values use
TAG_U8,TAG_U16,TAG_U32,TAG_U64, orTAG_U128with the value in little-endian - The encoding is stable and compatible across platforms
Source§impl Encoder for usize
Encodes usize using the platform’s pointer width, but always as a portable integer format.
impl Encoder for usize
Encodes usize using the platform’s pointer width, but always as a portable integer format.
Source§impl Encoder for String
Encodes a String as UTF-8 with a length prefix (short strings use a single tag byte).
impl Encoder for String
Encodes a String as UTF-8 with a length prefix (short strings use a single tag byte).
Source§impl<K: Encoder, V: Encoder> Encoder for HashMap<K, V>
Encodes a map as a length-prefixed sequence of key-value pairs.
impl<K: Encoder, V: Encoder> Encoder for HashMap<K, V>
Encodes a map as a length-prefixed sequence of key-value pairs.
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder> Encoder for (T0, T1, T2, T3, T4)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder> Encoder for (T0, T1, T2, T3, T4)
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder> Encoder for (T0, T1, T2, T3, T4, T5)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder> Encoder for (T0, T1, T2, T3, T4, T5)
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6)
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7)
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder, T9: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder, T9: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder, T9: Encoder, T10: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder, T9: Encoder, T10: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
Source§impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder, T9: Encoder, T10: Encoder, T11: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder, T6: Encoder, T7: Encoder, T8: Encoder, T9: Encoder, T10: Encoder, T11: Encoder> Encoder for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
Source§impl<T: Encoder + 'static> Encoder for Vec<T>
Encodes a Vec<T> as a length-prefixed sequence. Vec<u8> is optimized as binary.
impl<T: Encoder + 'static> Encoder for Vec<T>
Encodes a Vec<T> as a length-prefixed sequence. Vec<u8> is optimized as binary.
Source§impl<T: Encoder + Eq + Hash> Encoder for HashSet<T>
Encodes a set as a length-prefixed sequence of elements.
impl<T: Encoder + Eq + Hash> Encoder for HashSet<T>
Encodes a set as a length-prefixed sequence of elements.
Source§impl<T: Encoder> Encoder for Option<T>
Encodes an Option<T> as a tag byte followed by the value if present.
impl<T: Encoder> Encoder for Option<T>
Encodes an Option<T> as a tag byte followed by the value if present.
Source§impl<T: Encoder> Encoder for &T
Implementation for references - delegates to the referenced value
impl<T: Encoder> Encoder for &T
Implementation for references - delegates to the referenced value
Source§impl<T: Encoder, const N: usize> Encoder for [T; N]
Encodes a fixed-size array as a length-prefixed sequence.
impl<T: Encoder, const N: usize> Encoder for [T; N]
Encodes a fixed-size array as a length-prefixed sequence.