use crate::IValue;
use std::slice::Iter;
#[cfg(feature = "serde")]
pub use crate::serde::{de::from_interface_values, ser::to_interface_value};
pub(crate) struct FlattenIRecordIterator<'a> {
iterators: Vec<Iter<'a, IValue>>,
}
impl<'a> FlattenIRecordIterator<'a> {
pub(crate) fn new(values: &'a [IValue]) -> Self {
Self {
iterators: vec![values.iter()],
}
}
}
impl<'a> Iterator for FlattenIRecordIterator<'a> {
type Item = &'a IValue;
fn next(&mut self) -> Option<Self::Item> {
match self.iterators.last_mut()?.next() {
None => {
self.iterators.pop();
self.next()
}
Some(IValue::Record(fields)) => {
self.iterators.push(fields.iter());
self.next()
}
e @ Some(_) => e,
}
}
}