rust_multistack 0.33.0

Support for two-dimentional stacks for the Rust programming language
Documentation
use crate::ts::TS;
use rust_dynamic::types::NODATA;
use rust_dynamic::value::Value;
use easy_error::{Error};


impl TS {
    pub fn fold_current(&mut self) -> Result<&mut TS, Error> {
        let mut data = Value::list();
        loop {
            match self.pull() {
                Some(value) => {
                    if value.type_of() == NODATA {
                        break;
                    }
                    data = data.push(value);
                }
                None => {
                    break;
                }
            }
        }
        self.push(data);
        Ok(self)
    }
    pub fn fold_all_in_current(&mut self) -> Result<&mut TS, Error> {
        let mut data = Value::list();
        loop {
            match self.pull() {
                Some(value) => {
                    data = data.push(value);
                }
                None => {
                    break;
                }
            }
        }
        self.push(data);
        Ok(self)
    }
    pub fn fold_stack(&mut self, name: String) -> Result<&mut TS, Error> {
        let mut data = Value::list();
        loop {
            match self.pull_from_stack(name.clone()) {
                Some(value) => {
                    if value.type_of() == NODATA {
                        break;
                    }
                    data = data.push(value);
                }
                None => {
                    break;
                }
            }
        }
        self.push_to_stack(name.clone(), data);
        Ok(self)
    }
}