Struct buffertk::StackPacker

source ·
pub struct StackPacker<'a, P, T>where
    P: Packable + 'a,
    T: Packable + 'a,{ /* private fields */ }
Expand description

StackPacker is the type returned by StackPack. It’s a pointer to something packable (usually another StackPacker) and some type that we can directly pack. Both are packable, but it’s usually the case that the former is another StackPacker while the latter is the type being serialized in a call to pack.

Implementations§

source§

impl<'a, P, T> StackPacker<'a, P, T>where P: Packable + 'a, T: Packable + 'a,

source

pub fn pack<'b, U: Packable + 'b>(&'b self, u: U) -> StackPacker<'b, Self, U>

pack returns a new StackPacker that will pack self at its prefix. This does not actually do the packing, but defers it until calls to e.g. into_slice. Consequently, the object u must not change between this call and subsequent calls. Rust’s type system generally enforces this by default, except where interior mutability is specifically added.

source

pub fn into_slice<'b>(&self, buf: &'b mut [u8]) -> &'b mut [u8]

into_slice packs the entire chain of pack() calls into the provided mutable buffer. The return value is a slice containing exactly those bytes written and no more.

source

pub fn to_buffer(&self) -> Buffer

to_buffer allocates a new Buffer and packs the entire chain of pack() calls into it. The return value is a Buffer sized to exactly the packed bytes.

source

pub fn to_vec(&self) -> Vec<u8>

to_vec allocates a new vector and packs the entire chain of pack() calls into it. The return value is a Vec<u8> sized to exactly the packed bytes.

source

pub fn append_to_vec(&self, v: &mut Vec<u8>)

append_to_vec is a helper to extend a vector by the requisite size and then pack into the newly created space.

source

pub fn length_prefixed(&'a self) -> LengthPrefixer<'a, StackPacker<'a, P, T>>

Create a Packable object that will pack like "<varint-length><bytes>" where the length indicates how many bytes there are. Nothing gets copied. Usually this gets passed to another stack_pack, which will do the work.

Trait Implementations§

source§

impl<'a, P, T> Packable for StackPacker<'a, P, T>where P: Packable + 'a, T: Packable + 'a,

source§

fn pack_sz(&self) -> usize

pack_sz returns the number of bytes required to serialize the Packable object.
source§

fn pack(&self, out: &mut [u8])

pack fills in the buffer out with the packed binary representation of the Packable object. The implementor is responsible to ensure that out is exactly pack_sz() bytes and implementations are encouraged to assert this. Read more
source§

fn stream<W: Write>(&self, writer: &mut W) -> Result<usize, Error>where Self: Sized, for<'a> &'a Self: Packable,

stream writes the object to the provided writer using the same representation that would be used in a call to pack. The implementor is responsible for making sure that the number of bytes written is exactly equal to the number of required bytes. Read more

Auto Trait Implementations§

§

impl<'a, P, T> RefUnwindSafe for StackPacker<'a, P, T>where P: RefUnwindSafe, T: RefUnwindSafe,

§

impl<'a, P, T> Send for StackPacker<'a, P, T>where P: Sync, T: Send,

§

impl<'a, P, T> Sync for StackPacker<'a, P, T>where P: Sync, T: Sync,

§

impl<'a, P, T> Unpin for StackPacker<'a, P, T>where T: Unpin,

§

impl<'a, P, T> UnwindSafe for StackPacker<'a, P, T>where P: RefUnwindSafe, T: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.