Diffstat (limited to 'src/walk/walkers/core/noop.rs')
-rw-r--r--src/walk/walkers/core/noop.rs36
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(()))
+ }
+}