buni-rs 1.1.1

Reference Buni serializer / deserializer in Rust
Documentation
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)
    }
}