use super::{Error, paragraph};
use serde::{
de::{self, Visitor},
forward_to_deserialize_any,
};
use std::iter::Peekable;
pub(super) struct Deserializer<'a, IteratorT>
where
IteratorT: 'a,
IteratorT: Iterator<Item = &'a str>,
IteratorT: Clone,
{
pub(super) iter: Peekable<IteratorT>,
}
impl<'a, 'de, IteratorT> de::Deserializer<'de> for &mut Deserializer<'a, IteratorT>
where
IteratorT: 'a,
IteratorT: Clone,
IteratorT: Iterator<Item = &'a str>,
{
type Error = Error;
fn deserialize_any<V: Visitor<'de>>(self, visitor: V) -> Result<V::Value, Error> {
let mut de = paragraph::Deserializer {
iter: self.iter.clone(),
};
de.deserialize_map(visitor)
}
fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
let mut de = paragraph::Deserializer {
iter: self.iter.clone(),
};
de.deserialize_map(visitor)
}
forward_to_deserialize_any! {
char unit
u8 u16 u32 u64 u128 i8 i16 i32 i64 i128 f32 f64
bytes byte_buf str string
seq
identifier bool option
tuple unit_struct tuple_struct enum newtype_struct struct
ignored_any
}
}