rust_multistack/stdlib/
clear.rs

1use crate::ts::{TS};
2use rust_dynamic::value::Value;
3use easy_error::{Error, bail};
4
5
6pub fn stdlib_clear_in_current(ts: &mut TS, _value1: Option<Value>, _value2: Option<Value>) -> Result<&mut TS, Error> {
7    match ts.current() {
8        Some(stack) => {
9            stack.clear();
10        }
11        None => {
12            bail!("Can not locate current stack for clear()");
13        }
14    }
15    Ok(ts)
16}
17
18pub fn stdlib_clear_in_current_inline(ts: &mut TS) -> Result<&mut TS, Error> {
19    stdlib_clear_in_current(ts, None, None)
20}
21
22pub fn stdlib_clear_in_stack(ts: &mut TS, value1: Option<Value>, _value2: Option<Value>) -> Result<&mut TS, Error> {
23    match value1 {
24        Some(name_val) => {
25            match name_val.cast_string() {
26                Ok(name) => {
27                    match ts.stack(name.clone()) {
28                        Some(stack) => {
29                            stack.clear();
30                        }
31                        None => {
32                            bail!("Operation clear_in() can not find the stack: {}", &name);
33                        }
34                    }
35                }
36                Err(err) => {
37                    bail!("Operation clear_in() returned error: {}", err);
38                }
39            }
40        }
41        None => {
42            bail!("Name of stack is missed for a clear_in() operation");
43        }
44    }
45    Ok(ts)
46}
47
48pub fn stdlib_clear_in_stack_inline(ts: &mut TS) -> Result<&mut TS, Error> {
49    if ts.current_stack_len() < 1 {
50        bail!("Stack is too shallow for inline clear_in()");
51    }
52    let name = ts.pull();
53    stdlib_clear_in_stack(ts, name, None)
54}
55
56pub fn init_stdlib(ts: &mut TS) {
57    let _ = ts.register_function("clear".to_string(), stdlib_clear_in_current);
58    let _ = ts.register_inline("clear".to_string(), stdlib_clear_in_current_inline);
59    let _ = ts.register_function("clear_in".to_string(), stdlib_clear_in_stack);
60    let _ = ts.register_inline("clear_in".to_string(), stdlib_clear_in_stack_inline);
61}