1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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;
}