tycho 0.1.2

A minimal, self-describing and traversable binary data format designed around rust and the serde data model.
Documentation
use serde::de::{DeserializeSeed, SeqAccess};

use crate::{Element, Value};
use crate::error::TychoError;
use crate::serde::de::TychoDeserializer;

pub struct SeqArrayDeserializer {
    array: Vec<Value>,
}

impl SeqArrayDeserializer {
    pub fn new(x: Vec<Value>) -> Self {
        Self { array: x }
    }
}

impl<'de> SeqAccess<'de> for SeqArrayDeserializer {
    type Error = TychoError;

    fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<<T as DeserializeSeed<'de>>::Value>, Self::Error> where
        T: DeserializeSeed<'de> {
        if self.array.len() == 0 {
            Ok(None)
        } else {
            Ok(Some(seed.deserialize(TychoDeserializer::new(Element::Value(self.array.remove(0))))?))
        }

    }

    fn size_hint(&self) -> Option<usize> {
        Some(self.array.len())
    }
}

pub struct SeqListDeserializer {
    array: Vec<Element>,
}

impl SeqListDeserializer {
    pub fn new(x: Vec<Element>) -> Self {
        Self { array: x }
    }
}

impl<'de> SeqAccess<'de> for SeqListDeserializer {
    type Error = TychoError;

    fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<<T as DeserializeSeed<'de>>::Value>, Self::Error> where
        T: DeserializeSeed<'de> {
        if self.array.len() == 0 {
            Ok(None)
        } else {
            Ok(Some(seed.deserialize(TychoDeserializer::new(self.array.remove(0)))?))
        }

    }

    fn size_hint(&self) -> Option<usize> {
        Some(self.array.len())
    }
}