val 0.4.2

An arbitrary precision calculator language
Documentation
use super::*;

builtin! {
  Len {
    name: "len",
    arity: BuiltinArity::Exact(1),
    call(payload) {
      let value = &payload.arguments[0];

      match value {
        Value::String(s) => Ok(Value::Number(Number::from(s.chars().count()))),
        Value::List(items) => Ok(Value::Number(Number::from(items.len()))),
        _ => Err(Error::new(
          payload.span,
          format!("Cannot get length of {}", value.type_name()),
        )),
      }
    }
  }
}