Skip to main content

rl_lang/interpreter/stdlib/
len.rs

1use crate::{
2    interpreter::{evaluator::Evaluator, values::Value},
3    utils::{errors::Error, span::Span},
4};
5
6pub fn std_len(eval: &mut Evaluator, v: Value, span: Span) -> Result<i64, Error> {
7    match v {
8        Value::Values { items, .. } => Ok(items.len() as i64),
9        Value::String(s) => Ok(s.len() as i64),
10        Value::Tuple(items) => Ok(items.len() as i64),
11        other => Err(eval.err(
12            format!(
13                "len() expects an array or string, got {}",
14                other.type_name()
15            ),
16            span,
17        )),
18    }
19}