Diffstat (limited to 'src/build/builders/core/struct.rs')
| -rw-r--r-- | src/build/builders/core/struct.rs | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/build/builders/core/struct.rs b/src/build/builders/core/struct.rs index d1889b3..b3983ab 100644 --- a/src/build/builders/core/struct.rs +++ b/src/build/builders/core/struct.rs @@ -3,7 +3,7 @@ use core::{marker::PhantomData, ops::ControlFlow}; use crate::{ any::{OwnedStatic, TempBorrowedStatic, TempBorrowedStaticHrt, TypeName}, any_trait, - effect::{Effect, Effective, ErasedEffective}, + effect::{all_ctx, merge_ctx, Effect, Effective, ErasedEffective}, hkt::Marker, protocol::{ visitor::{ @@ -145,12 +145,16 @@ where self.mode = StructMode::Map; E::ready(NoopVisitor::new()) - .as_ctx(|noop| { - walker - .walk(DynVisitor(noop)) - .map(|x| x.to_continue().into()) - .into_erased() - }) + .as_ctx( + all_ctx, + |noop, _| { + walker + .walk(DynVisitor(noop)) + .map(|x| x.to_continue().into()) + .into_erased() + }, + merge_ctx, + ) .map(|(_, value)| value) .into_erased() } @@ -211,11 +215,15 @@ where }; E::ready((scope, visitor)) - .as_ctx(|(scope, visitor)| { - let scope: &mut DynSequenceScope<'_, '_, _> = scope; - - scope.next(DynVisitor(visitor)).into_erased() - }) + .as_ctx( + all_ctx, + |(scope, visitor), _| { + let scope: &mut DynSequenceScope<'_, '_, _> = scope; + + scope.next(DynVisitor(visitor)).into_erased() + }, + merge_ctx, + ) .map(|(_, result)| match result { Flow::Continue => ControlFlow::Continue(()), Flow::Err => ControlFlow::Break(VisitResult::Control(Flow::Err)), @@ -269,7 +277,11 @@ where }; E::ready((self, visitor, walker)) - .as_ctx(|(_, visitor, walker)| walker.walk(DynVisitor(visitor)).into_erased()) + .as_ctx( + all_ctx, + |(_, visitor, walker), _| walker.walk(DynVisitor(visitor)).into_erased(), + merge_ctx, + ) .map(|((this, visitor, _), flow)| { this.marker = visitor.field_marker; flow.to_continue().into() |