Diffstat (limited to 'src/build/builders/core.rs')
-rw-r--r--src/build/builders/core.rs20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/build/builders/core.rs b/src/build/builders/core.rs
index 41cffcb..2f285fa 100644
--- a/src/build/builders/core.rs
+++ b/src/build/builders/core.rs
@@ -1,4 +1,9 @@
-use crate::any_trait;
+use crate::{
+ any_trait,
+ effect::{Effect, Effective, EffectiveExt, ErasedEffective},
+ protocol::{visitor::VisitResult, DynVisitor},
+ DynWalkerObjSafe, Flow, Walker,
+};
// pub mod array;
pub mod bool;
@@ -21,3 +26,16 @@ impl NoopVisitor {
any_trait! {
impl['ctx] NoopVisitor = []
}
+
+impl NoopVisitor {
+ pub fn walk_dyn<'ctx: 'e, 'walker: 'e, 'e, E: Effect>(
+ walker: DynWalkerObjSafe<'walker, 'ctx, E>,
+ ) -> ErasedEffective<'e, VisitResult<DynWalkerObjSafe<'walker, 'ctx, E>>, E> {
+ E::ready(NoopVisitor::new()).as_ctx_map(|noop| {
+ walker
+ .walk(DynVisitor(noop))
+ .map(|x| x.to_continue().into())
+ .cast()
+ })
+ }
+}