pub struct TextDeserializer<'a, 'b, E> { /* private fields */ }
Expand description

A structure to deserialize text data into Rust values.

The example below demonstrates how to deserialize data

use jomini::{TextDeserializer, TextTape};
use serde::Deserialize;

#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct StructA {
  field1: String,
  field2: i32,
}

let data = b"field1=ENG field2=2";
let a: StructA = TextDeserializer::from_windows1252_slice(&data[..])?.deserialize()?;
assert_eq!(a, StructA {
  field1: "ENG".to_string(),
  field2: 2,
});

Since the Clausewitz text format is not self describing, one should not use the flatten serde attribute, as flattened structs won’t type cast, and instead prefer to deserialize in two steps:

use jomini::{TextDeserializer, TextTape};
use serde::Deserialize;

#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct StructB {
  field1: String,
}

#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct StructC {
  field2: i32,
}

let data = b"field1=ENG field2=2";
let tape = TextTape::from_slice(&data[..])?;
let b: StructB = TextDeserializer::from_windows1252_tape(&tape).deserialize()?;
let c: StructC = TextDeserializer::from_windows1252_tape(&tape).deserialize()?;
assert_eq!(b, StructB { field1: "ENG".to_string() });
assert_eq!(c, StructC { field2: 2 });

Implementations§

source§

impl TextDeserializer<'_, '_, Windows1252Encoding>

source

pub fn from_windows1252_reader<R>( reader: TokenReader<R> ) -> TextReaderDeserializer<R, Windows1252Encoding>
where R: Read,

(Experimental) Create a Windows1252 text deserializer over a reader

Considered experimental as it uses a TokenReader under the hood, which uses a different parsing routine geared toward save files.

source§

impl TextDeserializer<'_, '_, Utf8Encoding>

source

pub fn from_utf8_reader<R>( reader: TokenReader<R> ) -> TextReaderDeserializer<R, Utf8Encoding>
where R: Read,

Create a UTF8 text deserializer over a reader

source§

impl<'a, 'b> TextDeserializer<'a, 'b, Windows1252Encoding>

source

pub fn from_windows1252_slice( data: &'a [u8] ) -> Result<TextDeserializer<'_, '_, Windows1252Encoding>, Error>

Convenience method for parsing the given text data and deserializing as windows1252 encoded.

source

pub fn from_windows1252_tape( tape: &'b TextTape<'a> ) -> TextDeserializer<'a, 'b, Windows1252Encoding>

Deserialize the given text tape assuming quoted strings are windows1252 encoded.

source§

impl<'a, 'b> TextDeserializer<'a, 'b, Utf8Encoding>

source

pub fn from_utf8_slice( data: &'a [u8] ) -> Result<TextDeserializer<'_, '_, Utf8Encoding>, Error>

Convenience method for parsing the given text data and deserializing as utf8 encoded.

source

pub fn from_utf8_tape( tape: &'b TextTape<'a> ) -> TextDeserializer<'a, 'b, Utf8Encoding>

Deserialize the given text tape assuming quoted strings are utf8 encoded.

source§

impl<'a, 'b, E> TextDeserializer<'a, 'b, E>
where E: Encoding + Clone,

source

pub fn from_encoded_tape( tape: &'b TextTape<'a>, encoding: E ) -> TextDeserializer<'a, 'b, E>
where E: Encoding + Clone,

Deserialize the given text tape assuming quoted strings can be decoded according to the given encoder

source

pub fn from_reader( reader: &'b ObjectReader<'a, 'b, E> ) -> TextDeserializer<'a, 'b, E>
where E: Encoding + Clone,

Create text deserialization from an object reader

See example at ObjectReader::deserialize

source

pub fn deserialize<T>(&self) -> Result<T, Error>
where T: Deserialize<'a>,

Deserialize into provided type

Trait Implementations§

source§

impl<'de, 'a, 'tokens, E> Deserializer<'de> for &'a TextDeserializer<'de, 'tokens, E>
where E: Encoding + Clone,

§

type Error = Error

The error type that can be returned if some error occurs during deserialization.
source§

fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Require the Deserializer to figure out how to drive the visitor based on what data type is in the input. Read more
source§

fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a map of key-value pairs.
source§

fn deserialize_struct<V>( self, _name: &'static str, _fields: &'static [&'static str], visitor: V ) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a struct with a particular name and fields.
source§

fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a bool value.
source§

fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an i8 value.
source§

fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an i16 value.
source§

fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an i32 value.
source§

fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an i64 value.
source§

fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an i128 value. Read more
source§

fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a u8 value.
source§

fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a u16 value.
source§

fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a u32 value.
source§

fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a u64 value.
source§

fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an u128 value. Read more
source§

fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a f32 value.
source§

fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a f64 value.
source§

fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a char value.
source§

fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a string value and does not benefit from taking ownership of buffered data owned by the Deserializer. Read more
source§

fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a string value and would benefit from taking ownership of buffered data owned by the Deserializer. Read more
source§

fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a byte array and does not benefit from taking ownership of buffered data owned by the Deserializer. Read more
source§

fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a byte array and would benefit from taking ownership of buffered data owned by the Deserializer. Read more
source§

fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an optional value. Read more
source§

fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a unit value.
source§

fn deserialize_unit_struct<V>( self, name: &'static str, visitor: V ) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a unit struct with a particular name.
source§

fn deserialize_newtype_struct<V>( self, name: &'static str, visitor: V ) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a newtype struct with a particular name.
source§

fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a sequence of values.
source§

fn deserialize_tuple<V>( self, len: usize, visitor: V ) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a sequence of values and knows how many values there are without looking at the serialized data.
source§

fn deserialize_tuple_struct<V>( self, name: &'static str, len: usize, visitor: V ) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting a tuple struct with a particular name and number of fields.
source§

fn deserialize_enum<V>( self, name: &'static str, variants: &'static [&'static str], visitor: V ) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an enum value with a particular name and possible variants.
source§

fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type needs to deserialize a value whose type doesn’t matter because it is ignored. Read more
source§

fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting the name of a struct field or the discriminant of an enum variant.
source§

fn is_human_readable(&self) -> bool

Determine whether Deserialize implementations should expect to deserialize their human-readable form. Read more

Auto Trait Implementations§

§

impl<'a, 'b, E> Freeze for TextDeserializer<'a, 'b, E>
where E: Freeze,

§

impl<'a, 'b, E> RefUnwindSafe for TextDeserializer<'a, 'b, E>
where E: RefUnwindSafe,

§

impl<'a, 'b, E> Send for TextDeserializer<'a, 'b, E>
where E: Send + Sync,

§

impl<'a, 'b, E> Sync for TextDeserializer<'a, 'b, E>
where E: Sync,

§

impl<'a, 'b, E> Unpin for TextDeserializer<'a, 'b, E>
where E: Unpin,

§

impl<'a, 'b, E> UnwindSafe for TextDeserializer<'a, 'b, E>

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>,

§

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>,

§

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.