Postbag

Struct Postbag 

Source
pub struct Postbag;
Available on crate feature serde only.
Expand description

Postbag codec with full forward and backward compatibility.

Postbag is a high-performance binary codec that provides efficient data encoding with configurable levels of forward and backward compatibility. This codec uses the Full configuration which provides maximum compatibility and schema evolution capabilities.

ยงKey Features

  • Full fidelity of Rust type system: Supports all serde-compatible types including structs, enums, tuples, arrays, maps, and all primitive types
  • Efficient binary format: Uses variable-length encoding (varint) for integers, compact representations for common types, and minimal overhead
  • Full forward/backward compatibility: Fields and enum variants can be reordered, added, or removed safely

ยงForward and Backward Compatibility

The Full configuration provides comprehensive schema evolution capabilities:

  • Field reordering: Struct fields can be reordered without breaking compatibility
  • Field addition: New fields can be added to structs at any position
  • Field removal: Existing fields can be removed without affecting deserialization
  • Enum variant evolution: Enum variants can be added, removed, or reordered
  • Schema evolution: Safe evolution of data structures over time

ยงNumerical Identifier Encoding

Fields named _0 through _59 are encoded with just a single byte instead of the full string identifier. Use #[serde(rename = "...")] to specify numerical IDs:

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct CompactData {
    #[serde(rename = "_3")]
    my_field: u32,
    #[serde(rename = "_15")]
    another_field: String,
    // Regular field names work normally
    normal_field: bool,
}

This serializes and deserializes with field identifiers for maximum compatibility.

Trait Implementationsยง

Sourceยง

impl Clone for Postbag

Sourceยง

fn clone(&self) -> Postbag

Returns a duplicate of the value. Read more
1.0.0 ยท Sourceยง

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Sourceยง

impl Codec for Postbag

Sourceยง

fn serialize<Writer, Item>( writer: Writer, item: &Item, ) -> Result<(), SerializationError>
where Writer: Write, Item: Serialize,

Serializes the specified item into the data format.
Sourceยง

fn deserialize<Reader, Item>( reader: Reader, ) -> Result<Item, DeserializationError>
where Reader: Read, Item: DeserializeOwned,

Deserializes the specified data into an item.
Sourceยง

impl<'de> Deserialize<'de> for Postbag

Sourceยง

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Sourceยง

impl Serialize for Postbag

Sourceยง

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementationsยง

Blanket Implementationsยง

Sourceยง

impl<T> Any for T
where T: 'static + ?Sized,

Sourceยง

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Sourceยง

impl<T> Borrow<T> for T
where T: ?Sized,

Sourceยง

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Sourceยง

impl<T> BorrowMut<T> for T
where T: ?Sized,

Sourceยง

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Sourceยง

impl<T> CloneToUninit for T
where T: Clone,

Sourceยง

unsafe fn clone_to_uninit(&self, dest: *mut u8)

๐Ÿ”ฌThis is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Sourceยง

impl<T> From<T> for T

Sourceยง

fn from(t: T) -> T

Returns the argument unchanged.

Sourceยง

impl<T> Instrument for T

Sourceยง

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Sourceยง

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Sourceยง

impl<T, U> Into<U> for T
where U: From<T>,

Sourceยง

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Sourceยง

impl<T> ToOwned for T
where T: Clone,

Sourceยง

type Owned = T

The resulting type after obtaining ownership.
Sourceยง

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Sourceยง

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Sourceยง

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Sourceยง

type Error = Infallible

The type returned in the event of a conversion error.
Sourceยง

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Sourceยง

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Sourceยง

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Sourceยง

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Sourceยง

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Sourceยง

fn vzip(self) -> V

Sourceยง

impl<T> WithSubscriber for T

Sourceยง

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Sourceยง

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Sourceยง

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Sourceยง

impl<T> RemoteSend for T
where T: Send + Serialize + DeserializeOwned + 'static,