rust_multistack/
ts_to_current.rs1use 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}