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