Skip to main content

rl_lang/interpreter/stdlib/array/
arr_unique.rs

1use crate::{
2    interpreter::{evaluator::Evaluator, values::Value},
3    utils::{errors::Error, span::Span},
4};
5
6pub fn std_arr_unique(eval: &mut Evaluator, array: Value, span: Span) -> Result<Value, Error> {
7    match array {
8        Value::Values { items_type, items } => {
9            let mut seen = Vec::new();
10            for item in items {
11                if !seen.contains(&item) {
12                    seen.push(item);
13                }
14            }
15            Ok(Value::Values {
16                items_type,
17                items: seen,
18            })
19        }
20        _ => Err(eval.err("arr_unique() accepts only arrays".to_string(), span)),
21    }
22}