use serde::de::{self, Visitor}; use super::{Error, Result}; pub struct Deserializer<'a, 'b: 'a> { de: &'a mut super::Deserializer<'b>, map_as_struct: bool, } impl<'a, 'b: 'a> Deserializer<'a, 'b> { pub fn new(de: &'a mut super::Deserializer<'b>, map_as_struct: bool) -> Self { Deserializer { de, map_as_struct } } } impl<'a, 'b: 'a, 'c> de::Deserializer<'b> for &'c mut Deserializer<'a, 'b> { type Error = Error; fn deserialize_identifier(self, visitor: V) -> Result where V: Visitor<'b>, { if self.map_as_struct { // We only allow string keys in flattened structs and maps self.de.deserialize_str(visitor) } else { self.de.deserialize_identifier(visitor) } } fn deserialize_str(self, visitor: V) -> Result where V: Visitor<'b>, { self.deserialize_identifier(visitor) } fn deserialize_string(self, visitor: V) -> Result where V: Visitor<'b>, { self.deserialize_identifier(visitor) } fn deserialize_any(self, visitor: V) -> Result where V: Visitor<'b>, { self.deserialize_identifier(visitor) } fn deserialize_bool(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_i8(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_i16(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_i32(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_i64(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } #[cfg(feature = "integer128")] fn deserialize_i128(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_u8(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_u16(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_u32(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_u64(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } #[cfg(feature = "integer128")] fn deserialize_u128(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_f32(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_f64(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_char(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_bytes(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_byte_buf(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_option(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_unit(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_unit_struct(self, _: &'static str, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_newtype_struct(self, _: &'static str, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_seq(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_tuple(self, _: usize, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_tuple_struct(self, _: &'static str, _: usize, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_map(self, _: V) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_struct( self, _: &'static str, _: &'static [&'static str], _: V, ) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_enum( self, _: &'static str, _: &'static [&'static str], _: V, ) -> Result where V: Visitor<'b>, { Err(Error::ExpectedIdentifier) } fn deserialize_ignored_any(self, visitor: V) -> Result where V: Visitor<'b>, { self.deserialize_any(visitor) } }