pub struct KeyValueDeserializer<'de> {
    original_input: &'de str,
    input: &'de str,
    next_identifier: Option<&'de str>,
    has_equal: bool,
    top_struct_parsed: bool,
}
Expand description

Serde deserializer for key-values strings.

Fields§

§original_input: &'de str

Full input originally received for parsing.

§input: &'de str

Input currently remaining to parse.

§next_identifier: Option<&'de str>

If set, then deserialize_identifier will take and return its content the next time it is called instead of trying to parse an identifier from the input. This is needed to allow the name of the first field of a struct to be omitted, e.g.

–block “/path/to/disk.img,ro=true”

instead of

–block “path=/path/to/disk.img,ro=true”

§has_equal: bool

Whether the ‘=’ sign has been parsed after a key. The absence of ‘=’ is only valid for boolean fields, in which case the field’s value will be true.

§top_struct_parsed: bool

Whether the top structure has been parsed yet or not. The top structure is the only one that does not require to be enclosed within braces.

Implementations§

source§

impl<'de> KeyValueDeserializer<'de>

source

pub fn error_here(&self, kind: ErrorKind) -> ParseError

Return an kind error for the current position of the input.

source

pub fn peek_char(&self) -> Option<char>

Returns the next char in the input string without consuming it, or None if we reached the end of input.

source

pub fn skip_char(&mut self)

Skip the next char in the input string.

source

pub fn next_char(&mut self) -> Option<char>

Returns the next char in the input string and consume it, or returns None if we reached the end of input.

source

fn confirm_separator(&mut self) -> Result<(), ParseError>

Confirm that we have a separator (i.e. ‘,’ or ‘]’) character or have reached the end of the input string.

source

pub fn parse_identifier(&mut self) -> Result<&'de str, ParseError>

Attempts to parse an identifier, either for a key or for the value of an enum type.

source

pub fn parse_string(&mut self) -> Result<Cow<'de, str>, ParseError>

Attempts to parse a string.

source

pub fn parse_bool(&mut self) -> Result<bool, ParseError>

Attempt to parse a boolean.

source

pub fn parse_number<T>(&mut self) -> Result<T, ParseError>
where T: Num<FromStrRadixErr = ParseIntError>,

Attempt to parse a positive or negative number.

source

pub fn finish(self) -> Result<(), ParseError>

Consume this deserializer and return a TrailingCharacters error if some input was remaining.

This is useful to confirm that the whole input has been consumed without any extra elements.

Trait Implementations§

source§

impl<'de, 'a> Deserializer<'de> for &'a mut KeyValueDeserializer<'de>

§

type Error = ParseError

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

fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, ParseError>
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_bool<V>(self, visitor: V) -> Result<V::Value, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
where V: Visitor<'de>,

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

fn deserialize_f32<V>(self, _visitor: V) -> Result<V::Value, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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, ParseError>
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_map<V>(self, visitor: V) -> Result<V::Value, ParseError>
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, ParseError>
where V: Visitor<'de>,

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, ParseError>
where V: Visitor<'de>,

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

fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, ParseError>
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 deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, ParseError>
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_i128<V>( self, visitor: V ) -> Result<<V as Visitor<'de>>::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 as Visitor<'de>>::Value, Self::Error>
where V: Visitor<'de>,

Hint that the Deserialize type is expecting an u128 value. 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<'a, 'de> EnumAccess<'de> for &'a mut KeyValueDeserializer<'de>

§

type Error = ParseError

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

type Variant = &'a mut KeyValueDeserializer<'de>

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), ParseError>
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
source§

impl<'de> From<&'de str> for KeyValueDeserializer<'de>

source§

fn from(input: &'de str) -> Self

Converts to this type from the input type.
source§

impl<'de> MapAccess<'de> for KeyValueDeserializer<'de>

§

type Error = ParseError

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

fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, ParseError>
where K: DeserializeSeed<'de>,

This returns Ok(Some(key)) for the next key in the map, or Ok(None) if there are no more remaining entries. Read more
source§

fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, ParseError>
where V: DeserializeSeed<'de>,

This returns a Ok(value) for the next value in the map. Read more
source§

fn next_entry_seed<K, V>( &mut self, kseed: K, vseed: V ) -> Result<Option<(<K as DeserializeSeed<'de>>::Value, <V as DeserializeSeed<'de>>::Value)>, Self::Error>
where K: DeserializeSeed<'de>, V: DeserializeSeed<'de>,

This returns Ok(Some((key, value))) for the next (key-value) pair in the map, or Ok(None) if there are no more remaining items. Read more
source§

fn next_key<K>(&mut self) -> Result<Option<K>, Self::Error>
where K: Deserialize<'de>,

This returns Ok(Some(key)) for the next key in the map, or Ok(None) if there are no more remaining entries. Read more
source§

fn next_value<V>(&mut self) -> Result<V, Self::Error>
where V: Deserialize<'de>,

This returns a Ok(value) for the next value in the map. Read more
source§

fn next_entry<K, V>(&mut self) -> Result<Option<(K, V)>, Self::Error>
where K: Deserialize<'de>, V: Deserialize<'de>,

This returns Ok(Some((key, value))) for the next (key-value) pair in the map, or Ok(None) if there are no more remaining items. Read more
source§

fn size_hint(&self) -> Option<usize>

Returns the number of entries remaining in the map, if known.
source§

impl<'de> SeqAccess<'de> for KeyValueDeserializer<'de>

§

type Error = ParseError

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

fn next_element_seed<T>( &mut self, seed: T ) -> Result<Option<T::Value>, ParseError>
where T: DeserializeSeed<'de>,

This returns Ok(Some(value)) for the next value in the sequence, or Ok(None) if there are no more remaining items. Read more
source§

fn next_element<T>(&mut self) -> Result<Option<T>, Self::Error>
where T: Deserialize<'de>,

This returns Ok(Some(value)) for the next value in the sequence, or Ok(None) if there are no more remaining items. Read more
source§

fn size_hint(&self) -> Option<usize>

Returns the number of elements remaining in the sequence, if known.
source§

impl<'a, 'de> VariantAccess<'de> for &'a mut KeyValueDeserializer<'de>

§

type Error = ParseError

The error type that can be returned if some error occurs during deserialization. Must match the error type of our EnumAccess.
source§

fn unit_variant(self) -> Result<(), ParseError>

Called when deserializing a variant with no values. Read more
source§

fn newtype_variant_seed<T>(self, _seed: T) -> Result<T::Value, ParseError>
where T: DeserializeSeed<'de>,

Called when deserializing a variant with a single value. Read more
source§

fn tuple_variant<V>( self, len: usize, visitor: V ) -> Result<V::Value, ParseError>
where V: Visitor<'de>,

Called when deserializing a tuple-like variant. Read more
source§

fn struct_variant<V>( self, _fields: &'static [&'static str], visitor: V ) -> Result<V::Value, ParseError>
where V: Visitor<'de>,

Called when deserializing a struct-like variant. Read more
source§

fn newtype_variant<T>(self) -> Result<T, Self::Error>
where T: Deserialize<'de>,

Called when deserializing a variant with a single value. Read more

Auto Trait Implementations§

§

impl<'de> RefUnwindSafe for KeyValueDeserializer<'de>

§

impl<'de> Send for KeyValueDeserializer<'de>

§

impl<'de> Sync for KeyValueDeserializer<'de>

§

impl<'de> Unpin for KeyValueDeserializer<'de>

§

impl<'de> UnwindSafe for KeyValueDeserializer<'de>

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.