rust_multistack 0.33.0

Support for two-dimentional stacks for the Rust programming language
Documentation
use crate::ts::TS;
use easy_error::{bail, Error};


impl TS {
    pub fn to_current(&mut self, name: String) -> Result<&mut TS, Error> {
        self.ensure();
        if ! self.stack.contains_key(&name) {
            bail!("Stake with name {} noexists", &name);
        }
        let start_stack_name = match self.current_stack_name() {
            Some(stack_name) => stack_name,
            None => {
                bail!("Can not locate start stack for to_current() operation");
            }
        };
        self.left();
        loop {
            match self.stacks.back() {
                Some(stack_name) => {
                    if *stack_name == name {
                        break;
                    }
                    if *stack_name == start_stack_name {
                        bail!("We made a full circle over stacks and did not find {}", &name);
                    }
                    self.left();
                }
                None => {
                    bail!("We can not read stack name in to_current() operation");
                }
            }

        }
        return Ok(self);
    }
    pub fn to_stack(&mut self, name: String) -> Result<&mut TS, Error> {
        self.ensure();
        if ! self.stack.contains_key(&name) {
            return Ok(self.ensure_stack(name.clone()));
        }
        self.to_current(name.clone())
    }
}