Diffstat (limited to 'src/protocol/visitor/sequence.rs')
-rw-r--r--src/protocol/visitor/sequence.rs30
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;
}