Skip to main content

StreamDeserializer

Struct StreamDeserializer 

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

Reads the records of a stream (see deser::stream).

Every value of the stream is a record. The names of the columns are read before the first record (see headers). Errors of records (like fields that do not fit the type or records with the wrong number of fields) only discard the record, reading continues with the next one. Errors of the stream (like a record that exceeds set_max_record_len) end it.

use deser_csv::DeserializerConfig;

#[derive(deser::Deserialize)]
struct Row {
    name: String,
    age: u32,
}

let mut reader =
    DeserializerConfig::new().reader(&b"name,age\njane,42\njohn,23\n"[..]);
let rows = reader.iter::<Row>().collect::<Result<Vec<_>, _>>().unwrap();
assert_eq!(rows[1].age, 23);

Records 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 fields refer to the start of their record.

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 with_headers<I, S>( config: DeserializerConfig, names: I, ) -> StreamDeserializer
where I: IntoIterator<Item = S>, S: Into<String>,

Creates a stream deserializer for a stream which continues with the given names of the columns.

The stream does not start with names (they are not read from the first record), for instance because it’s the second half of a file:

use deser::io::Reader;
use deser_csv::{DeserializerConfig, StreamDeserializer};

#[derive(deser::Deserialize)]
struct Row {
    name: String,
    age: u32,
}

let de = StreamDeserializer::with_headers(DeserializerConfig::new(), ["name", "age"]);
let mut reader = Reader::new(&b"jane,42\n"[..], de);
let row: Row = reader.read().unwrap().unwrap();
assert_eq!((row.name.as_str(), row.age), ("jane", 42));
Source

pub fn config(&self) -> &DeserializerConfig

Returns the configuration.

Source

pub fn headers(&self) -> Option<&[String]>

Returns the names of the columns.

This is None until the first record was read (with Headers::First) or if records have no names (Headers::None).

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 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 supports_partial(&self) -> bool

Returns true if the deserializer implements drive_partial. 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.