Diffstat (limited to 'src/build/builders/core/value.rs')
| -rw-r--r-- | src/build/builders/core/value.rs | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/build/builders/core/value.rs b/src/build/builders/core/value.rs index b969ac2..22fe995 100644 --- a/src/build/builders/core/value.rs +++ b/src/build/builders/core/value.rs @@ -106,14 +106,17 @@ any_trait! { } impl<'ctx, T: Ss + 'static, E: Effect> RequestHint<'ctx, E> for ValueBuilder<T, NotCloneable, E> { - fn request_hint<'a>( - &'a mut self, - walker: DynWalker<'a, 'ctx>, - ) -> ErasedEffective<'a, VisitResult<DynWalker<'a, 'ctx>>, E> { + fn request_hint<'this: 'e, 'walker: 'e, 'e>( + &'this mut self, + walker: DynWalker<'walker, 'ctx>, + ) -> ErasedEffective<'e, VisitResult, E> + where + 'ctx: 'this + 'walker, + { E::as_ctx((self, walker), |(this, walker)| { - hint_protocol::<ValueProto<OwnedStatic<T>, E>>(walker.cast(), *this, ()).cast() + hint_protocol::<ValueProto<OwnedStatic<T>, E>, _>(walker.cast(), *this, ()).cast() }) - .map(|((_, walker), result)| result.map_skipped(|_| walker)) + .remove_ctx() } } @@ -121,28 +124,32 @@ impl<'ctx, T: Ss + 'static, E: Effect> RequestHint<'ctx, E> for ValueBuilder<T, where T: Clone, { - fn request_hint<'a>( - &'a mut self, - walker: DynWalker<'a, 'ctx>, - ) -> ErasedEffective<'a, VisitResult<DynWalker<'a, 'ctx>>, E> { + fn request_hint<'this: 'e, 'walker: 'e, 'e>( + &'this mut self, + walker: DynWalker<'walker, 'ctx>, + ) -> ErasedEffective<'e, VisitResult, E> + where + 'ctx: 'this + 'walker, + { E::as_ctx((self, walker), |(this, walker)| { - hint_protocol::<ValueProto<OwnedStatic<T>, E>>(walker.cast(), *this, ()).cast() + hint_protocol::<ValueProto<OwnedStatic<T>, E>, _>(walker.cast(), *this, ()).cast() }) .if_not_finished(|(this, walker)| { - hint_protocol::<ValueProto<BorrowedStaticHrt<T>, E>>(walker.cast(), *this, ()).cast() + hint_protocol::<ValueProto<BorrowedStaticHrt<T>, E>, _>(walker.cast(), *this, ()).cast() }) .if_not_finished(|(this, walker)| { - hint_protocol::<ValueProto<TempBorrowedStaticHrt<T>, E>>(walker.cast(), *this, ()) + hint_protocol::<ValueProto<TempBorrowedStaticHrt<T>, E>, _>(walker.cast(), *this, ()) .cast() }) .if_not_finished(|(this, walker)| { - hint_protocol::<ValueProto<BorrowedMutStaticHrt<T>, E>>(walker.cast(), *this, ()).cast() + hint_protocol::<ValueProto<BorrowedMutStaticHrt<T>, E>, _>(walker.cast(), *this, ()) + .cast() }) .if_not_finished(|(this, walker)| { - hint_protocol::<ValueProto<TempBorrowedMutStaticHrt<T>, E>>(walker.cast(), *this, ()) + hint_protocol::<ValueProto<TempBorrowedMutStaticHrt<T>, E>, _>(walker.cast(), *this, ()) .cast() }) - .map(|((_, walker), result)| result.map_skipped(|_| walker)) + .remove_ctx() } } |