Diffstat (limited to 'src/builtins/visitor/sequence.rs')
| -rw-r--r-- | src/builtins/visitor/sequence.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/builtins/visitor/sequence.rs b/src/builtins/visitor/sequence.rs new file mode 100644 index 0000000..b143c12 --- /dev/null +++ b/src/builtins/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; +} |