Skip to main content

FrameDecoder

Struct FrameDecoder 

Source
pub struct FrameDecoder { /* private fields */ }
Expand description

Streaming Lumberjack v2 frame decoder.

Accepts arbitrary slices of bytes via FrameDecoder::feed and emits fully decoded Frame values via FrameDecoder::next_frame. The internal buffer grows on demand and is compacted when consumed bytes pass a threshold so long-lived decoders do not accumulate unbounded dead capacity.

The decoder is not zero-copy: each Frame variant owns its payload bytes. This is deliberate — yielded frames are typically JSON-decoded immediately and the original bytes are dropped.

§Resource bounding

Both raw payload lengths (J, C frames) and decompressed inner sizes (C frame contents) are capped by FrameDecoder::with_max_frame_payload. The default is crate::DEFAULT_MAX_FRAME_PAYLOAD (64 MiB). This protects servers reading from untrusted peers from naive resource-exhaustion attacks (huge declared lengths, zlib bombs).

Implementations§

Source§

impl FrameDecoder

Source

pub const fn new() -> Self

Create a decoder with the default 64 MiB per-frame size cap.

Source

pub const fn with_max_frame_payload(max_frame_payload: usize) -> Self

Create a decoder with a custom per-frame size cap.

Applies to both raw payload lengths and decompressed inner content of C frames. Set to usize::MAX for “no cap” (not recommended on inputs from untrusted peers).

Source

pub fn feed(&mut self, bytes: &[u8])

Append bytes to the internal buffer. The bytes will be parsed on subsequent calls to Self::next_frame.

Source

pub const fn pending(&self) -> usize

How many fed bytes remain unconsumed in the internal buffer.

Source

pub fn next_frame(&mut self) -> Result<Option<Frame>, FrameError>

Try to decode one frame from the buffered bytes.

Returns:

  • Ok(Some(frame)) — a complete frame is available.
  • Ok(None) — not enough bytes yet; feed more.
  • Err(_) — malformed input; the buffer is left untouched at the offending position so the caller may inspect it. To continue parsing, callers typically tear down the connection.

Trait Implementations§

Source§

impl Debug for FrameDecoder

Source§

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

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

impl Default for FrameDecoder

Source§

fn default() -> Self

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

Auto Trait Implementations§

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