Trait alkahest::advanced::Buffer

source ·
pub trait Buffer {
    type Error;
    type Reborrow<'a>: Buffer<Error = Self::Error>
       where Self: 'a;

    // Required methods
    fn reborrow(&mut self) -> Self::Reborrow<'_>;
    fn write_stack(
        &mut self,
        heap: usize,
        stack: usize,
        bytes: &[u8]
    ) -> Result<(), Self::Error>;
    fn pad_stack(
        &mut self,
        heap: usize,
        stack: usize,
        len: usize
    ) -> Result<(), Self::Error>;
    fn move_to_heap(&mut self, heap: usize, stack: usize, len: usize);
    fn reserve_heap(
        &mut self,
        heap: usize,
        stack: usize,
        len: usize
    ) -> Result<&mut [u8], Self::Error>;
}
Expand description

Buffer API that is used by serializer. Buffers can be extensible or fixed size. Extensible buffers grow automatically when needed.

Required Associated Types§

source

type Error

Write error.

source

type Reborrow<'a>: Buffer<Error = Self::Error> where Self: 'a

Reborrowed buffer type.

Required Methods§

source

fn reborrow(&mut self) -> Self::Reborrow<'_>

Reborrow this buffer.

source

fn write_stack( &mut self, heap: usize, stack: usize, bytes: &[u8] ) -> Result<(), Self::Error>

Writes bytes to the stack.

Errors

If buffer cannot write bytes, it should return Err.

source

fn pad_stack( &mut self, heap: usize, stack: usize, len: usize ) -> Result<(), Self::Error>

Add padding bytes to the stack.

Errors

If buffer cannot add padding bytes, it should return Err.

source

fn move_to_heap(&mut self, heap: usize, stack: usize, len: usize)

Moves bytes from stack to heap.

source

fn reserve_heap( &mut self, heap: usize, stack: usize, len: usize ) -> Result<&mut [u8], Self::Error>

Reserves heap space and returns a buffer over it. Returned buffer is always of FixedBuffer type.

If buffer cannot reserve heap space, it may return either Err or Ok([]). If Ok([]) is returned serializer should skip writing this part of the data and continue writing the rest.

Errors

If buffer cannot reserve heap space, it should return Err. If nothing needs to be written to the reserved heap, it should return Ok([]).

Implementations on Foreign Types§

source§

impl<'a> Buffer for &'a mut [u8]

§

type Error = Infallible

§

type Reborrow<'b> where 'a: 'b = &'b mut [u8]

source§

fn reborrow(&mut self) -> &mut [u8]

source§

fn write_stack( &mut self, heap: usize, stack: usize, bytes: &[u8] ) -> Result<(), Infallible>

source§

fn pad_stack( &mut self, heap: usize, stack: usize, len: usize ) -> Result<(), Infallible>

source§

fn move_to_heap(&mut self, heap: usize, stack: usize, len: usize)

source§

fn reserve_heap( &mut self, heap: usize, stack: usize, len: usize ) -> Result<&mut [u8], Infallible>

Implementors§

source§

impl<'a> Buffer for CheckedFixedBuffer<'a>

§

type Error = BufferExhausted

§

type Reborrow<'b> where 'a: 'b = CheckedFixedBuffer<'b>

source§

impl<'a> Buffer for MaybeFixedBuffer<'a>

§

type Error = Infallible

§

type Reborrow<'b> where 'a: 'b = MaybeFixedBuffer<'b>

source§

impl<'a> Buffer for VecBuffer<'a>

§

type Error = Infallible

§

type Reborrow<'b> where 'a: 'b = VecBuffer<'b>