Diffstat (limited to 'src/protocol/visitor/sequence.rs')
-rw-r--r--src/protocol/visitor/sequence.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/protocol/visitor/sequence.rs b/src/protocol/visitor/sequence.rs
new file mode 100644
index 0000000..b143c12
--- /dev/null
+++ b/src/protocol/visitor/sequence.rs
@@ -0,0 +1,40 @@
+
+use crate::{
+ builtins::walker::hint::Meta,
+ protocol::{Implementer, Protocol},
+};
+
+pub enum Sequence {}
+
+#[derive(PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Debug)]
+pub enum Status {
+ Done,
+ Continue,
+}
+
+pub trait SequenceWalker<'ctx> {
+ fn next(&mut self, visitor: &mut dyn Implementer<'ctx>) -> Result<Status, ()>;
+}
+
+pub trait Object<'ctx> {
+ fn visit(&mut self, walker: &mut dyn SequenceWalker<'ctx>) -> Result<(), ()>;
+}
+
+impl Protocol for Sequence {
+ type Object<'a, 'ctx: 'a> = &'a mut dyn Object<'ctx>;
+}
+
+#[derive(Default)]
+pub struct Known {
+ pub len: (usize, Option<usize>),
+}
+
+pub struct Hint {
+ pub len: (usize, Option<usize>),
+}
+
+impl Meta for Sequence {
+ type Known<'a, 'ctx: 'a> = Known;
+
+ type Hint<'a, 'ctx: 'a> = Hint;
+}