rust_multistack/
ts_to_current.rs

1use crate::ts::TS;
2use easy_error::{bail, Error};
3
4
5impl TS {
6    pub fn to_current(&mut self, name: String) -> Result<&mut TS, Error> {
7        self.ensure();
8        if ! self.stack.contains_key(&name) {
9            bail!("Stake with name {} noexists", &name);
10        }
11        let start_stack_name = match self.current_stack_name() {
12            Some(stack_name) => stack_name,
13            None => {
14                bail!("Can not locate start stack for to_current() operation");
15            }
16        };
17        self.left();
18        loop {
19            match self.stacks.back() {
20                Some(stack_name) => {
21                    if *stack_name == name {
22                        break;
23                    }
24                    if *stack_name == start_stack_name {
25                        bail!("We made a full circle over stacks and did not find {}", &name);
26                    }
27                    self.left();
28                }
29                None => {
30                    bail!("We can not read stack name in to_current() operation");
31                }
32            }
33
34        }
35        return Ok(self);
36    }
37    pub fn to_stack(&mut self, name: String) -> Result<&mut TS, Error> {
38        self.ensure();
39        if ! self.stack.contains_key(&name) {
40            return Ok(self.ensure_stack(name.clone()));
41        }
42        self.to_current(name.clone())
43    }
44}