Skip to main content

rl_lang/interpreter/stdlib/array/
arr_concat.rs

1use crate::{
2    interpreter::{evaluator::Evaluator, values::Value},
3    utils::{errors::Error, span::Span},
4};
5
6pub fn std_arr_concat(
7    eval: &mut Evaluator,
8    array1: Value,
9    array2: Value,
10    span: Span,
11) -> Result<Value, Error> {
12    match (array1, array2) {
13        (
14            Value::Values {
15                items_type: it_1,
16                items: i1,
17            },
18            Value::Values {
19                items_type: it_2,
20                items: i2,
21            },
22        ) => {
23            if it_1 != it_2 {
24                return Err(eval.err(
25                    format!(
26                        "type mismatch: array type {:?}, cannot concat {:?}",
27                        it_1, it_2
28                    ),
29                    span,
30                ));
31            }
32            let mut v = i1;
33            v.extend(i2);
34            Ok(Value::Values {
35                items_type: it_1,
36                items: v,
37            })
38        }
39        _ => Err(eval.err("arr_concat() accepts only arrays".to_string(), span)),
40    }
41}