array-mumu 0.2.0-rc.5

Array tools plugin for the Mumu ecosystem
Documentation
// FILE: array/src/length.rs

use mumu::parser::types::Value;
use mumu::parser::interpreter::Interpreter;

/// array:length(arr) — returns the number of items in an array, string, or keys in a keyed array.
/// - Arrays: returns length of outermost array (not recursive).
/// - KeyedArray: returns number of keys.
/// - String/StrArray: returns string length (single string) or length of StrArray.
/// - Anything else: returns 0.
pub fn array_length_bridge(
    _interp: &mut Interpreter,
    args: Vec<Value>
) -> Result<Value, String> {
    if args.len() != 1 {
        return Err("array:length expects exactly one argument".to_string());
    }
    let v = &args[0];
    let len = match v {
        Value::IntArray(xs) => xs.len() as i32,
        Value::FloatArray(xs) => xs.len() as i32,
        Value::BoolArray(xs) => xs.len() as i32,
        Value::StrArray(xs) => xs.len() as i32,
        Value::MixedArray(xs) => xs.len() as i32,
        Value::Int2DArray(xs) => xs.len() as i32,
        Value::Float2DArray(xs) => xs.len() as i32,
        Value::KeyedArray(map) => map.len() as i32,
        Value::SingleString(s) => s.chars().count() as i32,
        _ => 0,
    };
    Ok(Value::Int(len))
}