Diffstat (limited to 'src/walk/walkers/core/noop.rs')
| -rw-r--r-- | src/walk/walkers/core/noop.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/walk/walkers/core/noop.rs b/src/walk/walkers/core/noop.rs new file mode 100644 index 0000000..03b4b7c --- /dev/null +++ b/src/walk/walkers/core/noop.rs @@ -0,0 +1,36 @@ +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] +pub struct NoopWalker; + +impl NoopWalker { + pub fn new() -> Self { + Self + } +} + +impl WalkerTypes for NoopWalker { + type Error = Never; + + type Output = (); +} + +impl<'ctx, E: Effect<'ctx>> crate::Walker<'ctx, E> for NoopWalker { + fn walk<'a>( + self, + _visitor: Visitor<'a, 'ctx>, + ) -> Future<'a, 'ctx, Result<Self::Output, Self::Error>, E> + where + Self: 'a, + { + E::ready(Ok(())) + } +} |