Diffstat (limited to 'src/protocol/visitor/request_hint.rs')
| -rw-r--r-- | src/protocol/visitor/request_hint.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/protocol/visitor/request_hint.rs b/src/protocol/visitor/request_hint.rs index 343dcb9..8b4f573 100644 --- a/src/protocol/visitor/request_hint.rs +++ b/src/protocol/visitor/request_hint.rs @@ -3,16 +3,20 @@ use crate::{ bijective_higher_ranked_type, effect::{Effect, Future}, protocol::{Visitor, Walker}, - Flow, }; +use super::VisitResult; + /// Protocol for requesting a hint from a visitor. pub trait RequestHint<'ctx, E: Effect> { /// Call this to request a hint. /// /// `walker` is what the visitor (`self`) will call to give a hint using the /// [`Hint`][crate::builtins::walker::Hint] protocol. - fn request_hint<'a>(&'a mut self, walker: Walker<'a, 'ctx>) -> Future<'a, Flow, E>; + fn request_hint<'a>( + &'a mut self, + walker: Walker<'a, 'ctx>, + ) -> Future<'a, VisitResult<Walker<'a, 'ctx>>, E>; } bijective_higher_ranked_type! { @@ -43,12 +47,12 @@ bijective_higher_ranked_type! { pub fn visit_request_hint<'a, 'ctx, E: Effect>( visitor: Visitor<'a, 'ctx>, walker: Walker<'a, 'ctx>, -) -> Future<'a, Flow, E> { +) -> Future<'a, VisitResult<Walker<'a, 'ctx>>, E> { if let Some(object) = visitor.upcast_mut::<DynRequestHint<'ctx, E>>() { // Allow the visitor to give a hint if it wants. object.request_hint(walker) } else { // If the visitor doesn't support request hint then we continue. - E::ready(Flow::Continue) + E::ready(VisitResult::Skipped(walker)) } } |