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§
Required Methods§
sourcefn write_stack(
&mut self,
heap: usize,
stack: usize,
bytes: &[u8]
) -> Result<(), Self::Error>
fn write_stack( &mut self, heap: usize, stack: usize, bytes: &[u8] ) -> Result<(), Self::Error>
sourcefn move_to_heap(&mut self, heap: usize, stack: usize, len: usize)
fn move_to_heap(&mut self, heap: usize, stack: usize, len: usize)
Moves bytes from stack to heap.
sourcefn reserve_heap(
&mut self,
heap: usize,
stack: usize,
len: usize
) -> Result<&mut [u8], Self::Error>
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([])
.