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.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
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 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<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, 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<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> 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> 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> 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> 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> 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> 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<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, 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.
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> 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.