use {
crate::{
de::Deserializer,
error::{Error, Result},
},
serde::de::{DeserializeSeed, SeqAccess},
};
pub struct SeqReader<'a, 'de: 'a> {
de: &'a mut Deserializer<'de>,
}
impl<'a, 'de> SeqReader<'a, 'de> {
pub fn new(de: &'a mut Deserializer<'de>) -> Self {
SeqReader { de }
}
}
impl<'de, 'a> SeqAccess<'de> for SeqReader<'a, 'de> {
type Error = Error;
fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>>
where
T: DeserializeSeed<'de>,
{
self.de.eat_shit()?;
if self.de.peek_char()? == ']' {
return Ok(None);
}
let v = seed.deserialize(&mut *self.de)?;
self.de.eat_shit_and(Some(','))?;
Ok(Some(v))
}
}