use serde_json::Map;
use serde_json::Value;
pub(in crate::value) enum JsonValueCompareFrame<'a> {
Array {
left: std::slice::Iter<'a, Value>,
right: std::slice::Iter<'a, Value>,
},
Object {
left: serde_json::map::Iter<'a>,
right: &'a Map<String, Value>,
},
}
impl<'a> JsonValueCompareFrame<'a> {
pub(in crate::value) fn next_pair(&mut self) -> Option<Option<(&'a Value, &'a Value)>> {
match self {
Self::Array { left, right } => match (left.next(), right.next()) {
(Some(left), Some(right)) => Some(Some((left, right))),
(None, None) => None,
_ => unreachable!("array lengths are checked before creating a frame"),
},
Self::Object { left, right } => left
.next()
.map(|(key, value)| right.get(key).map(|other| (value, other))),
}
}
}