use crate::{
effect::{Effect, Future},
never::Never,
protocol::Visitor,
WalkerTypes,
};
/// A walker that does nothing.
///
/// This walker is useful for tags that don't need a value.
#[non_exhaustive]
#[derive(Debug, Default)]
pub struct NoopWalker;
impl NoopWalker {
pub fn new() -> Self {
Self
}
}
impl WalkerTypes for NoopWalker {
type Error = Never;
type Output = ();
}
impl<'ctx, E: Effect> crate::Walker<'ctx, E> for NoopWalker {
fn walk<'a>(
self,
_visitor: Visitor<'a, 'ctx>,
) -> Future<'a, Result<Self::Output, Self::Error>, E>
where
Self: 'a,
{
E::ready(Ok(()))
}
}