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§
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.
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 f32
Encodes an f32 as a scientific notation string.
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§impl Encoder for f64
Encodes an f64 as a scientific notation string.
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§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 + 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.