pub struct StructBuffer<M: StructLength> { /* private fields */ }Expand description
A buffer that accumulates bytes of sized structs and feeds them to provided sink function when messages are complete. This buffer handles partial messages and multiple messages in a single push.
Implementations§
Source§impl<M: StructLength> StructBuffer<M>
impl<M: StructLength> StructBuffer<M>
Sourcepub fn push<'a: 'b, 'b>(
&'b mut self,
bytes: &'a [u8],
f: impl for<'c> FnMut(Result<M::Struct<'c>, ParseError>),
)
pub fn push<'a: 'b, 'b>( &'b mut self, bytes: &'a [u8], f: impl for<'c> FnMut(Result<M::Struct<'c>, ParseError>), )
Pushes bytes into the buffer, potentially feeding output to the function.
§Lifetimes
'a: The lifetime of the input byte slice.'b: The lifetime of the mutable reference toself.'c: A lifetime used in the closure’s type, representing the lifetime of theM::Structinstances passed to it.
The constraint 'a: 'b ensures that the input bytes live at least as long as the mutable reference to self.
The for<'c> syntax in the closure type is a higher-ranked trait bound. It indicates that the closure
must be able to handle M::Struct with any lifetime 'c. This is crucial because:
- It allows the
pushmethod to createM::Structinstances with lifetimes that are not known at the time the closure is defined. - It ensures that the
M::Structinstances passed to the closure are only valid for the duration of each call to the closure, not for the entire lifetime of thepushmethod. - It prevents the closure from storing or returning these
M::Structinstances, as their lifetime is limited to the scope of each closure invocation.
Sourcepub fn push_fallible<'a: 'b, 'b, E>(
&'b mut self,
bytes: &'a [u8],
f: impl for<'c> FnMut(Result<M::Struct<'c>, ParseError>) -> Result<(), E>,
) -> Result<(), E>
pub fn push_fallible<'a: 'b, 'b, E>( &'b mut self, bytes: &'a [u8], f: impl for<'c> FnMut(Result<M::Struct<'c>, ParseError>) -> Result<(), E>, ) -> Result<(), E>
Pushes bytes into the buffer, potentially feeding output to the function.
§Lifetimes
'a: The lifetime of the input byte slice.'b: The lifetime of the mutable reference toself.'c: A lifetime used in the closure’s type, representing the lifetime of theM::Structinstances passed to it.
The constraint 'a: 'b ensures that the input bytes live at least as long as the mutable reference to self.
The for<'c> syntax in the closure type is a higher-ranked trait bound. It indicates that the closure
must be able to handle M::Struct with any lifetime 'c. This is crucial because:
- It allows the
pushmethod to createM::Structinstances with lifetimes that are not known at the time the closure is defined. - It ensures that the
M::Structinstances passed to the closure are only valid for the duration of each call to the closure, not for the entire lifetime of thepushmethod. - It prevents the closure from storing or returning these
M::Structinstances, as their lifetime is limited to the scope of each closure invocation.