pub trait BufferProvider<Input, Output> {
type Error;
// Required methods
fn alloc_no_reuse(
self,
prefix: usize,
body: usize,
suffix: usize,
) -> Result<Output, Self::Error>;
fn reuse_or_realloc(
self,
buffer: Input,
prefix: usize,
suffix: usize,
) -> Result<Output, (Self::Error, Input)>;
}Expand description
An object capable of providing buffers which satisfy certain constraints.
A BufferProvider<Input, Output> is an object which is capable of consuming
a buffer of type Input and, either by reusing it or by allocating a new
one and copying the input buffer’s body into it, producing a buffer of type
Output which meets certain prefix and suffix length constraints.
A BufferProvider must always be provided when serializing a
Serializer.
Implementors may find the helper function try_reuse_buffer useful.
For clients who don’t need the full expressive power of this trait, the
simpler BufferAlloc trait is provided. It only defines how to allocate
new buffers, and two blanket impls of BufferProvider are provided for all
BufferAlloc types.
Required Associated Types§
Sourcetype Error
type Error
The type of errors returned from reuse_or_realloc.
Required Methods§
Sourcefn alloc_no_reuse(
self,
prefix: usize,
body: usize,
suffix: usize,
) -> Result<Output, Self::Error>
fn alloc_no_reuse( self, prefix: usize, body: usize, suffix: usize, ) -> Result<Output, Self::Error>
Attempts to produce an output buffer with the given constraints by allocating a new one.
alloc_no_reuse produces a new buffer with the following invariants:
- The output buffer must have at least
prefixbytes of prefix - The output buffer must have at least
suffixbytes of suffix - The output buffer must have a body of length
bodybytes.
If these requirements cannot be met, then an error is returned.
Sourcefn reuse_or_realloc(
self,
buffer: Input,
prefix: usize,
suffix: usize,
) -> Result<Output, (Self::Error, Input)>
fn reuse_or_realloc( self, buffer: Input, prefix: usize, suffix: usize, ) -> Result<Output, (Self::Error, Input)>
Consumes an input buffer and attempts to produce an output buffer with the given constraints, either by reusing the input buffer or by allocating a new one and copying the body into it.
reuse_or_realloc consumes a buffer by value, and produces a new buffer
with the following invariants:
- The output buffer must have at least
prefixbytes of prefix - The output buffer must have at least
suffixbytes of suffix - The output buffer must have the same body as the input buffer
If these requirements cannot be met, then an error is returned along with the input buffer, which is unmodified.