rl_lang/interpreter/stdlib/array/
arr_flatten.rs1use crate::{
2 interpreter::{evaluator::Evaluator, values::Value},
3 utils::{errors::Error, span::Span},
4};
5
6pub fn std_arr_flatten(eval: &mut Evaluator, array: Value, span: Span) -> Result<Value, Error> {
7 match array {
8 Value::Values { items, items_type } => {
9 if items.is_empty() {
10 return Err(eval.err("arr_flatten() called on empty array".to_string(), span));
11 }
12
13 Ok(Value::Values {
14 items_type,
15 items: items
16 .into_iter()
17 .flat_map(|v| {
18 if let Value::Values { items, .. } = v {
19 items
20 } else {
21 vec![v]
22 }
23 })
24 .collect(),
25 })
26 }
27 _ => Err(eval.err("arr_flatten() accepts only arrays".to_string(), span)),
28 }
29}