Diffstat (limited to 'src/protocol/visitor/sequence.rs')
| -rw-r--r-- | src/protocol/visitor/sequence.rs | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/protocol/visitor/sequence.rs b/src/protocol/visitor/sequence.rs index 3cb8897..9b24377 100644 --- a/src/protocol/visitor/sequence.rs +++ b/src/protocol/visitor/sequence.rs @@ -1,20 +1,28 @@ use crate::{ nameable, - protocol::{walker::HintMeta, ControlFlow, Visitor}, + protocol::{walker::HintMeta, ControlFlowFor, Effect, SyncEffect, Visitor}, }; -pub trait Sequence<'ctx> { - fn visit(&mut self, scope: &mut dyn SequenceScope<'ctx>) -> ControlFlow; +pub trait Sequence<'ctx, E: Effect = SyncEffect> { + fn visit<'a>(&'a mut self, scope: &'a mut dyn SequenceScope<'ctx, E>) -> ControlFlowFor<'a, E>; } nameable! { - pub struct Name['a, 'ctx]; - impl for dyn Sequence<'ctx> + 'a where { 'ctx: 'a } - impl where dyn Sequence<'ctx> + 'a { 'ctx: 'a } + pub struct Name['a, 'ctx, E]; + + impl [E] for dyn Sequence<'ctx, E> + 'a where { + E: Effect + 'static, + 'ctx: 'a + } + + impl [E] where dyn Sequence<'ctx, E> + 'a { + E: Effect + 'static, + 'ctx: 'a + } } -pub trait SequenceScope<'ctx> { - fn next(&mut self, visitor: Visitor<'_, 'ctx>) -> ControlFlow<(), Status>; +pub trait SequenceScope<'ctx, E: Effect = SyncEffect> { + fn next<'a>(&'a mut self, visitor: &'a mut Visitor<'ctx>) -> ControlFlowFor<'a, E, Status>; } #[derive(PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Debug)] @@ -32,10 +40,12 @@ pub struct Hint { pub len: (usize, Option<usize>), } -impl<'ctx> HintMeta<'ctx> for dyn Sequence<'ctx> + '_ { +impl<'ctx, E: Effect> HintMeta<'ctx> for dyn Sequence<'ctx, E> + '_ { type Known<'a> = Known where 'ctx: 'a; - type Hint = Hint; + type Hint<'a> = Hint + where + 'ctx: 'a; } |