use crate::dm::Node;
use super::Async;
pub trait Metadata {
fn access<F, R>(&self, f: F) -> R
where
F: FnOnce(&Node<'_>) -> R;
}
impl<T> Metadata for &T
where
T: Metadata,
{
fn access<F, R>(&self, f: F) -> R
where
F: FnOnce(&Node<'_>) -> R,
{
(**self).access(f)
}
}
impl Metadata for Node<'_> {
fn access<F, R>(&self, f: F) -> R
where
F: FnOnce(&Node<'_>) -> R,
{
f(self)
}
}
impl<M, H> Metadata for (M, H)
where
M: Metadata,
{
fn access<F, R>(&self, f: F) -> R
where
F: FnOnce(&Node<'_>) -> R,
{
self.0.access(f)
}
}
impl<T> Metadata for Async<T>
where
T: Metadata,
{
fn access<F, R>(&self, f: F) -> R
where
F: FnOnce(&Node<'_>) -> R,
{
self.0.access(f)
}
}