Struct jomini::text::de::TextDeserializer
source · 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>
impl TextDeserializer<'_, '_, Windows1252Encoding>
sourcepub fn from_windows1252_reader<R>(
reader: TokenReader<R>
) -> TextReaderDeserializer<R, Windows1252Encoding>where
R: Read,
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>
impl TextDeserializer<'_, '_, Utf8Encoding>
sourcepub fn from_utf8_reader<R>(
reader: TokenReader<R>
) -> TextReaderDeserializer<R, Utf8Encoding>where
R: Read,
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>
impl<'a, 'b> TextDeserializer<'a, 'b, Windows1252Encoding>
sourcepub fn from_windows1252_slice(
data: &'a [u8]
) -> Result<TextDeserializer<'_, '_, Windows1252Encoding>, Error>
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.
sourcepub fn from_windows1252_tape(
tape: &'b TextTape<'a>
) -> TextDeserializer<'a, 'b, Windows1252Encoding>
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>
impl<'a, 'b> TextDeserializer<'a, 'b, Utf8Encoding>
sourcepub fn from_utf8_slice(
data: &'a [u8]
) -> Result<TextDeserializer<'_, '_, Utf8Encoding>, Error>
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.
sourcepub fn from_utf8_tape(
tape: &'b TextTape<'a>
) -> TextDeserializer<'a, 'b, Utf8Encoding>
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>
impl<'a, 'b, E> TextDeserializer<'a, 'b, E>
sourcepub fn from_encoded_tape(
tape: &'b TextTape<'a>,
encoding: E
) -> TextDeserializer<'a, 'b, E>
pub fn from_encoded_tape( tape: &'b TextTape<'a>, encoding: E ) -> TextDeserializer<'a, 'b, E>
Deserialize the given text tape assuming quoted strings can be decoded according to the given encoder
sourcepub fn from_reader(
reader: &'b ObjectReader<'a, 'b, E>
) -> TextDeserializer<'a, 'b, E>
pub fn from_reader( reader: &'b ObjectReader<'a, 'b, E> ) -> TextDeserializer<'a, 'b, E>
Create text deserialization from an object reader
See example at ObjectReader::deserialize
sourcepub fn deserialize<T>(&self) -> Result<T, Error>where
T: Deserialize<'a>,
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>
impl<'de, 'a, 'tokens, E> Deserializer<'de> for &'a TextDeserializer<'de, 'tokens, E>
source§fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserializer
to figure out how to drive the visitor based
on what data type is in the input. Read moresource§fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_struct<V>(
self,
_name: &'static str,
_fields: &'static [&'static str],
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a bool
value.source§fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i8
value.source§fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i16
value.source§fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i32
value.source§fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an i64
value.source§fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
source§fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u8
value.source§fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u16
value.source§fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u32
value.source§fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a u64
value.source§fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
source§fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a f32
value.source§fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a f64
value.source§fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a char
value.source§fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a string value and does
not benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresource§fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a string value and would
benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresource§fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a byte array and does not
benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresource§fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting a byte array and would
benefit from taking ownership of buffered data owned by the
Deserializer
. Read moresource§fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting an optional value. Read moresource§fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_newtype_struct<V>(
self,
name: &'static str,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_tuple<V>(
self,
len: usize,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_enum<V>(
self,
name: &'static str,
variants: &'static [&'static str],
visitor: V
) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
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>,
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type needs to deserialize a value whose type
doesn’t matter because it is ignored. Read moresource§fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>where
V: Visitor<'de>,
Deserialize
type is expecting the name of a struct
field or the discriminant of an enum variant.source§fn is_human_readable(&self) -> bool
fn is_human_readable(&self) -> bool
Deserialize
implementations should expect to
deserialize their human-readable form. Read more