forests/navigator/
mod.rs

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}