pub trait Serialize {
// Required method
fn serialize<E: Encode + ?Sized>(&self, encoder: &mut E) -> Result<()>;
// Provided method
fn serialize_slice<E: Encode + ?Sized>(
slice: &[Self],
encoder: &mut E,
) -> Result<()>
where Self: Sized { ... }
}Expand description
Types that know how to write themselves into any Encode sink.
The contract is: serialize appends the type’s wire-format bytes to the
encoder. It does not clear the encoder first — encoders are
stream-shaped, and may already hold bytes from prior writes.
Implementors MUST be deterministic: for any two equal values a and b
(in the type’s Eq / PartialEq sense, or its semantic equivalent for
types like f64), the bytes appended by a.serialize(&mut enc) MUST
equal the bytes appended by b.serialize(&mut enc).
§Examples
use pack_io::{Encode, Encoder, Result, Serialize};
struct Point { x: i32, y: i32 }
impl Serialize for Point {
fn serialize<E: Encode + ?Sized>(&self, enc: &mut E) -> Result<()> {
self.x.serialize(enc)?;
self.y.serialize(enc)
}
}
let mut enc = Encoder::new();
Point { x: 3, y: -7 }.serialize(&mut enc).unwrap();
assert!(!enc.as_bytes().is_empty());Required Methods§
Sourcefn serialize<E: Encode + ?Sized>(&self, encoder: &mut E) -> Result<()>
fn serialize<E: Encode + ?Sized>(&self, encoder: &mut E) -> Result<()>
Append the encoded bytes of self to encoder.
§Errors
Primitive impls in this crate are infallible on the in-memory
crate::Encoder. Streaming encoders (IoEncoder<W>) may surface
a crate::SerialError when the underlying Write errors. User
impls may also surface custom errors via crate::SerialError.
Provided Methods§
Sourcefn serialize_slice<E: Encode + ?Sized>(
slice: &[Self],
encoder: &mut E,
) -> Result<()>where
Self: Sized,
fn serialize_slice<E: Encode + ?Sized>(
slice: &[Self],
encoder: &mut E,
) -> Result<()>where
Self: Sized,
Append the encoded bytes of every element of slice to encoder.
The default implementation calls Serialize::serialize once per
element. Types that can take advantage of a single bulk operation
— most importantly u8, which compiles down to a single
extend_from_slice / Write::write_all instead of N individual
pushes — override this to skip the per-element loop overhead.
This method is the seam that makes Vec<u8> encode at memcpy
speed without forcing unsafe or specialisation onto the public
trait surface. The [T]::serialize impl calls
T::serialize_slice(self, encoder) rather than looping inline, so
any Serialize impl that overrides serialize_slice automatically
applies to every &[T], Vec<T>, [T; N], and &[u8]-shaped
payload that flows through it.
§Errors
Propagates any error returned by the per-element / bulk operation.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl Serialize for u8
impl Serialize for u8
Source§fn serialize_slice<E: Encode + ?Sized>(
slice: &[u8],
encoder: &mut E,
) -> Result<()>
fn serialize_slice<E: Encode + ?Sized>( slice: &[u8], encoder: &mut E, ) -> Result<()>
Single bulk write — bypasses the per-element loop the default impl
would emit. For an in-memory crate::Encoder this compiles to a
single Vec::extend_from_slice; for crate::IoEncoder it is one
Write::write_all. Either way it replaces N per-byte calls with a
memcpy.
fn serialize<E: Encode + ?Sized>(&self, encoder: &mut E) -> Result<()>
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize, T9: Serialize, T10: Serialize, T11: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize, T9: Serialize, T10: Serialize, T11: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize, T9: Serialize, T10: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize, T9: Serialize, T10: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize, T9: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize, T9: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize, T8: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize, T7: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6, T7)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize, T6: Serialize> Serialize for (T0, T1, T2, T3, T4, T5, T6)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize> Serialize for (T0, T1, T2, T3, T4, T5)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize> Serialize for (T0, T1, T2, T3, T4, T5)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize> Serialize for (T0, T1, T2, T3, T4)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize> Serialize for (T0, T1, T2, T3, T4)
Source§impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize> Serialize for (T0, T1, T2, T3)
impl<T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize> Serialize for (T0, T1, T2, T3)
Source§impl<T, S> Serialize for HashSet<T, S>where
T: Serialize,
Available on crate feature std only.
impl<T, S> Serialize for HashSet<T, S>where
T: Serialize,
std only.