Trait Encoder

Source
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§

Source

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.
Source

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§

Source

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.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for f32

Encodes an f32 as a tag and 4 bytes (little-endian IEEE 754).

Source§

fn pack(&self, writer: &mut BytesMut) -> Result<()>

Packs an f32 as 4 bytes (little-endian IEEE 754) without a type tag.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for f64

Encodes an f64 as a tag and 8 bytes (little-endian IEEE 754).

Source§

fn pack(&self, writer: &mut BytesMut) -> Result<()>

Packs an f64 as 8 bytes (little-endian IEEE 754) without a type tag.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

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_NEGATIVE and bit-inverted encoding
Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for i16

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for i32

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for i64

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for i128

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for isize

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

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, or TAG_U128 with the value in little-endian
  • The encoding is stable and compatible across platforms
Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for u16

See u8 for format details.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for u32

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for u64

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for u128

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for ()

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for usize

Encodes usize using the platform’s pointer width, but always as a portable integer format.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for String

Encodes a String as UTF-8 with a length prefix (short strings use a single tag byte).

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for Bytes

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<K: Encoder + Ord, V: Encoder> Encoder for BTreeMap<K, V>

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<K: Encoder, V: Encoder> Encoder for HashMap<K, V>

Encodes a map as a length-prefixed sequence of key-value pairs.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T0: Encoder> Encoder for (T0,)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T0: Encoder, T1: Encoder> Encoder for (T0, T1)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T0: Encoder, T1: Encoder, T2: Encoder> Encoder for (T0, T1, T2)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder> Encoder for (T0, T1, T2, T3)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder> Encoder for (T0, T1, T2, T3, T4)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T0: Encoder, T1: Encoder, T2: Encoder, T3: Encoder, T4: Encoder, T5: Encoder> Encoder for (T0, T1, T2, T3, T4, T5)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

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)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

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)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

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)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

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)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

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)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

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)

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder + 'static> Encoder for Vec<T>

Encodes a Vec<T> as a length-prefixed sequence. Vec<u8> is optimized as binary.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder + Eq + Hash> Encoder for HashSet<T>

Encodes a set as a length-prefixed sequence of elements.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder + Ord> Encoder for BTreeSet<T>

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder> Encoder for Option<T>

Encodes an Option<T> as a tag byte followed by the value if present.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder> Encoder for &T

Implementation for references - delegates to the referenced value

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder> Encoder for Box<T>

Encodes a Box<T> by encoding the inner value.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder> Encoder for Arc<T>

Encodes an Arc<T> by encoding the inner value.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Source§

impl<T: Encoder, const N: usize> Encoder for [T; N]

Encodes a fixed-size array as a length-prefixed sequence.

Source§

fn encode(&self, writer: &mut BytesMut) -> Result<()>

Source§

fn is_default(&self) -> bool

Implementors§