Encoder

Trait Encoder 

Source
pub trait Encoder {
    // Required methods
    fn encode(&self, writer: &mut BytesMut) -> Result<()>;
    fn is_default(&self) -> bool;
}
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.

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 char

Encodes a char as its Unicode code point using the same format as u32.

Source§

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

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for f32

Encodes an f32 as a scientific notation string.

Note: Pack/Unpack still uses binary format for efficiency. The string format provides better compatibility and readability for Encode/Decode.

Source§

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

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for f64

Encodes an f64 as a scientific notation string.

Note: Pack/Unpack still uses binary format for efficiency. The string format provides better compatibility and readability for Encode/Decode.

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

See u32 for format details.

Source§

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

Source§

fn is_default(&self) -> bool

Source§

impl Encoder for u128

See u64 for format details.

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.

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§