Skip to main content

StreamDeserializer

Struct StreamDeserializer 

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

Reads a stream of JSON values (see deser::stream).

How the stream is split depends on DeserializerConfig::set_trailing:

  • Trailing::Strict: the stream holds a single value which is parsed once the whole stream was read.
  • Trailing::Newline: every line holds a value (JSON Lines). Blank lines are skipped and errors only discard their line, reading continues with the next one.
  • Trailing::Stop: values follow each other (optionally separated by whitespace) and are split where they end. Numbers at the end of the stream are only complete at the end of the stream, other values are complete once their last byte was read. Reading continues after values that fail to deserialize, values that are not valid JSON end the stream (unless they are read from their frames).

Except for JSON Lines, values which do not borrow are deserialized while their input arrives (see StreamDeserializer::drive_partial) so only incomplete tokens are buffered.

use deser_jsonc::{DeserializerConfig, Trailing};

const LINES: DeserializerConfig =
    DeserializerConfig::builder().trailing(Trailing::Newline).build();
let mut reader = LINES.reader(&b"[1, 2]\n[3]\n"[..]);
assert_eq!(reader.read::<Vec<u32>>().unwrap(), Some(vec![1, 2]));
assert_eq!(reader.read::<Vec<u32>>().unwrap(), Some(vec![3]));
assert_eq!(reader.read::<Vec<u32>>().unwrap(), None);

Values which are read from their frames are parsed like with a Deserializer, so they can borrow from the stream’s buffer (see InputBuffer::deserialize). The input ranges (and thus locations) of these values refer to the start of their line (or value), those of values that are deserialized while their input arrives to the stream.

Implementations§

Source§

impl StreamDeserializer

Source

pub fn new() -> StreamDeserializer

Creates a stream deserializer.

Source

pub fn with_config(config: DeserializerConfig) -> StreamDeserializer

Creates a stream deserializer with the given configuration.

Source

pub fn config(&self) -> &DeserializerConfig

Returns the configuration.

Trait Implementations§

Source§

impl Debug for StreamDeserializer

Source§

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

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

impl Default for StreamDeserializer

Source§

fn default() -> StreamDeserializer

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

impl StreamDeserializer for StreamDeserializer

Source§

fn supports_partial(&self) -> bool

JSON Lines are read line by line, the other values while their input arrives.

Source§

fn context(&self) -> Context

Returns the context the values are deserialized in. Read more
Source§

fn frame(&mut self, input: &[u8], eof: bool) -> Result<Frame, Error>

Finds the next value in the input. Read more
Source§

fn drive_frame<'de>( &mut self, frame: &'de [u8], driver: &mut DeserializeDriver<'_, 'de>, ) -> Result<(), Error>

Deserializes a value from its frame. Read more
Source§

fn is_text(&self) -> bool

Returns true if the format is text. Read more
Source§

fn drive_partial( &mut self, input: &[u8], offset: usize, eof: bool, driver: &mut DeserializeDriver<'_, '_>, ) -> Result<Progress, Error>

Deserializes a value while its input arrives. Read more
Source§

fn peek(&mut self, input: &[u8], eof: bool) -> Result<Option<Progress>, Error>

Finds the start of the next value without deserializing it. 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, 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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.