val 0.6.0

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

#[derive(Clone, Debug)]
pub struct BuiltinFunction {
  pub arity: BuiltinArity,
  pub function: fn(BuiltinFunctionPayload<'_>) -> Result<Value>,
  pub name: &'static str,
}

impl BuiltinFunction {
  pub(crate) fn call(
    &self,
    arguments: Vec<Value>,
    config: Config,
    span: &Span,
  ) -> Result<Value> {
    (self.function)(BuiltinFunctionPayload {
      arguments,
      config,
      name: self.name,
      span,
    })
  }

  pub(crate) fn check_arity(&self, len: usize, span: &Span) -> Result<()> {
    self.arity.check(self.name, len, span)
  }
}