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