use crate::deserialize::adapter::deserialize::Deserializer;
use crate::deserialize::Item;
use crate::DeserializeError;
use nom::Input;
use serde_core::de::{DeserializeSeed, SeqAccess};
use core::fmt::{Debug, Display};
use core::marker::PhantomData;
pub struct SequenceDeserializer<I: Input + Debug + Display, R: Iterator<Item = Item>> {
pub items: R,
pub phantom_data: PhantomData<I>,
pub size: usize
}
impl<'de, I: Input + Debug + Display, R: Iterator<Item = Item>> SeqAccess<'de> for SequenceDeserializer<I, R> {
type Error = DeserializeError<I>;
fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>
where
T: DeserializeSeed<'de>
{
match self.items.next() {
None => Ok(None),
Some(item) => {
seed.deserialize(&mut Deserializer::from_item(item)).map(Some)
}
}
}
fn size_hint(&self) -> Option<usize> {
Some(self.size)
}
}