Struct SimpleTypeDeserializer

Source
pub struct SimpleTypeDeserializer<'de, 'a> {
    content: CowRef<'de, 'a, [u8]>,
    escaped: bool,
    decoder: Decoder,
}
Expand description

A deserializer for an xml probably escaped and encoded value of XSD simple types. This deserializer will borrow from the input as much as possible.

deserialize_any() returns the whole string that deserializer contains.

Escaping the value is actually not always necessary, for instance when converting to a float, we don’t expect any escapable character anyway. In that cases deserializer skips unescaping step.

Used for deserialize values from:

  • attribute values (<... ...="value" ...>)
  • mixed text / CDATA content (<...>text<![CDATA[cdata]]></...>)

This deserializer processes items as following:

  • numbers are parsed from a text content using FromStr;
  • booleans converted from the text according to the XML specification:
    • "true" and "1" converted to true;
    • "false" and "0" converted to false;
  • strings returned as is;
  • characters also returned as strings. If string contain more than one character or empty, it is responsibility of a type to return an error;
  • Option always deserialized as Some using the same deserializer. If attribute or text content is missed, then the deserializer even wouldn’t be used, so if it is used, then the value should be;
  • units (()) and unit structs always deserialized successfully;
  • newtype structs forwards deserialization to the inner type using the same deserializer;
  • sequences, tuples and tuple structs are deserialized as xs:lists. Only sequences of primitive types is possible to deserialize this way and they should be delimited by a space ( , \t, \r, or \n);
  • structs and maps delegates to Self::deserialize_str;
  • enums:
  • identifiers are deserialized as strings.

Fields§

§content: CowRef<'de, 'a, [u8]>
  • In case of attribute contains escaped attribute value
  • In case of text contains unescaped text value
§escaped: bool

If true, content in escaped form and should be unescaped before use

§decoder: Decoder

Decoder used to deserialize string data, numeric and boolean data. Not used for deserializing raw byte buffers

Implementations§

Source§

impl<'de, 'a> SimpleTypeDeserializer<'de, 'a>

Source

pub fn from_text(text: Cow<'de, str>) -> Self

Creates a deserializer from a value, that possible borrowed from input

Source

pub fn from_text_content(value: Text<'de>) -> Self

Creates a deserializer from a value, that possible borrowed from input

Source

pub fn from_part( value: &'a Cow<'de, [u8]>, range: Range<usize>, escaped: bool, decoder: Decoder, ) -> Self

Creates a deserializer from a part of value at specified range

Source

const fn new( content: CowRef<'de, 'a, [u8]>, escaped: bool, decoder: Decoder, ) -> Self

Constructor for tests

Source

fn decode<'b>(&'b self) -> Result<Content<'de, 'b>, DeError>

Decodes raw bytes using the encoding specified. The method will borrow if has the UTF-8 compatible representation.

Trait Implementations§

Source§

impl<'de, 'a> Deserializer<'de> for SimpleTypeDeserializer<'de, 'a>

Source§

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

Forwards deserialization to the Self::deserialize_str

Source§

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

Forwards deserialization to the Self::deserialize_str

Source§

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

Forwards deserialization to the Self::deserialize_str

Source§

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

Forwards deserialization to the Self::deserialize_str

Source§

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

Forwards deserialization to the Self::deserialize_str

Source§

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

Forwards deserialization to the Self::deserialize_unit

Source§

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

Representation of tuples the same as sequences.

Source§

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

Representation of named tuples the same as unnamed tuples.

Source§

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

Forwards deserialization to the Self::deserialize_str

Source§

type Error = DeError

The error type that can be returned if some error occurs during deserialization.
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_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_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_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_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_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_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_map<V: Visitor<'de>>( self, visitor: V, ) -> Result<V::Value, Self::Error>

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

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

Hint that the Deserialize type is expecting a struct with a particular name and 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 is_human_readable(&self) -> bool

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

impl<'de, 'a> EnumAccess<'de> for SimpleTypeDeserializer<'de, 'a>

Source§

type Error = DeError

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

type Variant = UnitOnly

The Visitor that will be used to deserialize the content of the enum variant.
Source§

fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self::Variant), DeError>
where V: DeserializeSeed<'de>,

variant is called to identify which variant to deserialize. Read more
Source§

fn variant<V>(self) -> Result<(V, Self::Variant), Self::Error>
where V: Deserialize<'de>,

variant is called to identify which variant to deserialize. Read more

Auto Trait Implementations§

§

impl<'de, 'a> Freeze for SimpleTypeDeserializer<'de, 'a>

§

impl<'de, 'a> RefUnwindSafe for SimpleTypeDeserializer<'de, 'a>

§

impl<'de, 'a> Send for SimpleTypeDeserializer<'de, 'a>

§

impl<'de, 'a> Sync for SimpleTypeDeserializer<'de, 'a>

§

impl<'de, 'a> Unpin for SimpleTypeDeserializer<'de, 'a>

§

impl<'de, 'a> UnwindSafe for SimpleTypeDeserializer<'de, 'a>

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 = 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.