Skip to main content

BufferChainBuilder

Struct BufferChainBuilder 

Source
pub struct BufferChainBuilder<T> { /* private fields */ }
Expand description

A builder for buffer chains using type-state to enforce readable/writable order.

Upholds invariants: at least one buffer must be present in the chain, and readable buffers must be added before writable buffers.

The builder stores up to 16 buffer elements inline to avoid allocation for common small chains. Larger chains are still supported and spill to the heap.

Implementations§

Source§

impl BufferChainBuilder<Readable>

Source

pub fn new() -> Self

Create a new builder in the Readable state.

Source

pub fn readable(self, addr: u64, len: u32) -> Self

Add a readable buffer (device reads from this).

Source

pub fn readables( self, elements: impl IntoIterator<Item = impl Into<BufferElement>>, ) -> Self

Add multiple readable buffers from an iterator.

Source

pub fn writable(self, addr: u64, len: u32) -> BufferChainBuilder<Writable>

Add a writable buffer (device writes to this).

This transitions to Writable state so no more readable buffers can be added.

Source

pub fn writables( self, elements: impl IntoIterator<Item = impl Into<BufferElement>>, ) -> BufferChainBuilder<Writable>

Add multiple writable buffers from an iterator.

This transitions to Writable state so no more readable buffers can be added.

Source

pub fn build(self) -> Result<BufferChain, RingError>

Build a buffer chain with only readable buffers.

Chain must have at least one buffer otherwise an error is returned.

Source§

impl BufferChainBuilder<Writable>

Source

pub fn writable(self, addr: u64, len: u32) -> Self

Add writable buffer

Source

pub fn writables( self, elements: impl IntoIterator<Item = impl Into<BufferElement>>, ) -> Self

Add multiple writable buffers from an iterator.

Source

pub fn build(self) -> Result<BufferChain, RingError>

Build the buffer chain.

Chain must have at least one buffer otherwise an error is returned.

Trait Implementations§

Source§

impl<T: Debug> Debug for BufferChainBuilder<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Default> Default for BufferChainBuilder<T>

Source§

fn default() -> BufferChainBuilder<T>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<T> Freeze for BufferChainBuilder<T>

§

impl<T> RefUnwindSafe for BufferChainBuilder<T>
where T: RefUnwindSafe,

§

impl<T> Send for BufferChainBuilder<T>
where T: Send,

§

impl<T> Sync for BufferChainBuilder<T>
where T: Sync,

§

impl<T> Unpin for BufferChainBuilder<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for BufferChainBuilder<T>

§

impl<T> UnwindSafe for BufferChainBuilder<T>
where T: UnwindSafe,

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> 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, 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<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