array-mumu 0.2.0-rc.5

Array tools plugin for the Mumu ecosystem
Documentation
use mumu::parser::interpreter::Interpreter;
use mumu::parser::types::Value;

/// array:init(arr) — returns all but the last element of the array,
/// preserving the input array's type even when the result is empty.
///
/// Supported types:
///   - IntArray      → IntArray
///   - FloatArray    → FloatArray
///   - StrArray      → StrArray
///   - BoolArray     → BoolArray
///   - MixedArray    → MixedArray
///
/// Errors for any non-array input.
pub fn array_init_bridge(_interp: &mut Interpreter, args: Vec<Value>) -> Result<Value, String> {
    if args.len() != 1 {
        return Err("array:init expects exactly one argument".to_string());
    }

    match &args[0] {
        Value::IntArray(xs) => {
            let n = xs.len().saturating_sub(1);
            Ok(Value::IntArray(xs[..n].to_vec()))
        }
        Value::FloatArray(xs) => {
            let n = xs.len().saturating_sub(1);
            Ok(Value::FloatArray(xs[..n].to_vec()))
        }
        Value::StrArray(xs) => {
            let n = xs.len().saturating_sub(1);
            Ok(Value::StrArray(xs[..n].to_vec()))
        }
        Value::BoolArray(xs) => {
            let n = xs.len().saturating_sub(1);
            Ok(Value::BoolArray(xs[..n].to_vec()))
        }
        Value::MixedArray(xs) => {
            let n = xs.len().saturating_sub(1);
            Ok(Value::MixedArray(xs[..n].to_vec()))
        }
        other => Err(format!(
            "array:init => expected an array, got {:?}",
            other
        )),
    }
}