Skip to main content

StreamingJsonDecoder

Struct StreamingJsonDecoder 

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

Streaming JSON decoder for Server-Sent Events (SSE)

This decoder handles newline-delimited JSON streams commonly used in HTTP/SSE transports.

§Security

The decoder enforces a maximum buffer size of 1MB to prevent denial-of-service attacks via unbounded memory consumption. If an attacker sends continuous data without newlines, the buffer will be cleared after exceeding the limit.

Implementations§

Source§

impl StreamingJsonDecoder

Source

pub fn new() -> Self

Create a new streaming decoder with default 1MB buffer limit

Source

pub fn with_capacity(capacity: usize) -> Self

Create with pre-allocated buffer capacity and default limit

Source

pub fn with_max_size(max_size: usize) -> Self

Create with custom maximum buffer size

§Arguments
  • max_size - Maximum buffer size in bytes (capped at 10MB for safety)
§Security

Setting this too high may allow DoS attacks via memory exhaustion. The value is capped at 10MB regardless of input.

Source

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

Feed data into the decoder

§Security

If the buffer exceeds the maximum size, it will be cleared and an error will be returned on the next try_decode call.

Source

pub fn try_decode<T: DeserializeOwned>(&mut self) -> CodecResult<Option<T>>

Try to decode the next complete message

Returns Some(T) if a complete message is available, None if more data is needed.

Source

pub fn clear(&mut self)

Clear the internal buffer

Source

pub fn is_empty(&self) -> bool

Check if buffer is empty

Source

pub fn len(&self) -> usize

Get current buffer length

Source

pub fn max_buffer_size(&self) -> usize

Get maximum buffer size

Trait Implementations§

Source§

impl Debug for StreamingJsonDecoder

Source§

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

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

impl Default for StreamingJsonDecoder

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
Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSync for T
where T: Sync + ?Sized,