foreach_embedded
This commit is contained in:
parent
e9b5b3549c
commit
7c8a5c61ca
|
@ -51,6 +51,17 @@ pub trait NestedValue<D: Embeddable>: Sized + Debug + Clone + Eq + Hash + Ord {
|
|||
{
|
||||
Ok(M::wrap(self.annotations().copy_via(f)?, self.value().copy_via(f)?))
|
||||
}
|
||||
|
||||
fn foreach_embedded<F, Err>(&self, f: &mut F) -> Result<(), Err>
|
||||
where
|
||||
F: FnMut(&D) -> Result<(), Err>
|
||||
{
|
||||
match &self.annotations().0 {
|
||||
None => (),
|
||||
Some(vs) => for v in vs { v.foreach_embedded(f)? },
|
||||
}
|
||||
self.value().foreach_embedded(f)
|
||||
}
|
||||
}
|
||||
|
||||
/// The `Value`s from the specification.
|
||||
|
@ -796,6 +807,29 @@ impl<N: NestedValue<D>, D: Embeddable> Value<N, D> {
|
|||
Value::Embedded(d) => f(d)?,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn foreach_embedded<F, Err>(&self, f: &mut F) -> Result<(), Err>
|
||||
where
|
||||
F: FnMut(&D) -> Result<(), Err>
|
||||
{
|
||||
match self {
|
||||
Value::Boolean(_) |
|
||||
Value::Float(_) |
|
||||
Value::Double(_) |
|
||||
Value::SignedInteger(_) |
|
||||
Value::String(_) |
|
||||
Value::ByteString(_) |
|
||||
Value::Symbol(_) => Ok(()),
|
||||
Value::Record(r) => Ok(for v in r.fields_vec() { v.foreach_embedded(f)? }),
|
||||
Value::Sequence(vs) => Ok(for v in vs { v.foreach_embedded(f)? }),
|
||||
Value::Set(vs) => Ok(for v in vs { v.foreach_embedded(f)? }),
|
||||
Value::Dictionary(d) => Ok(for (k, v) in d {
|
||||
k.foreach_embedded(f)?;
|
||||
v.foreach_embedded(f)?;
|
||||
}),
|
||||
Value::Embedded(d) => f(d),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<N: NestedValue<D>, D: Embeddable> Index<usize> for Value<N, D> {
|
||||
|
|
Loading…
Reference in New Issue