Diffstat (limited to 'src/build/builders/core.rs')
| -rw-r--r-- | src/build/builders/core.rs | 20 |
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() + }) + } +} |