1#[derive(Copy, Clone, PartialEq, Eq)]
2pub enum SeekPos {
3 TopFirst,
4 TopLast,
5 BottomFirst,
6 BottomLast,
7}
8
9#[derive(Copy, Clone, PartialEq, Eq)]
10pub enum NavigateDir {
11 Up(bool),
12 Down,
13 Left,
14 Right,
15}
16
17pub trait BiIterator: Iterator {
18 fn prev(&mut self) -> Option<Self::Item>;
19}
20
21pub trait Navigator {
22 type Item;
23
24 fn navigate(&mut self, dir: NavigateDir) -> Option<Self::Item>;
25
26 fn seek(&mut self, pos: SeekPos) -> Option<Self::Item>;
27
28 fn down(&mut self) -> Option<Self::Item> {
29 self.navigate(NavigateDir::Down)
30 }
31
32 fn right(&mut self) -> Option<Self::Item> {
33 self.navigate(NavigateDir::Right)
34 }
35
36 fn left(&mut self) -> Option<Self::Item> {
37 self.navigate(NavigateDir::Left)
38 }
39
40 fn up(&mut self) -> Option<Self::Item> {
41 self.navigate(NavigateDir::Up(true))
42 }
43
44 fn exit(&mut self) -> Option<Self::Item> {
45 self.navigate(NavigateDir::Up(false))
46 }
47}