Skip to main content

rl_lang/interpreter/stdlib/array/
arr_index_of.rs

1use crate::{
2    interpreter::{evaluator::Evaluator, values::Value},
3    utils::{errors::Error, span::Span},
4};
5
6pub fn std_arr_index_of(
7    eval: &mut Evaluator,
8    array: Value,
9    value: Value,
10    span: Span,
11) -> Result<Value, Error> {
12    match array {
13        Value::Values { items, .. } => match items.iter().position(|item| *item == value) {
14            Some(pos) => Ok(Value::Integer(pos as i64)),
15            None => Ok(Value::Integer(-1)),
16        },
17        _ => Err(eval.err("arr_index_of() accepts only arrays".to_string(), span)),
18    }
19}