val 0.4.0

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

#[derive(Clone, Copy, Debug)]
pub enum BuiltinFunction {
  Fallible(
    for<'src> fn(&BuiltinFunctionPayload<'src>) -> Result<Value<'src>, Error>,
  ),
  Infallible(for<'src> fn(&BuiltinFunctionPayload<'src>) -> Value<'src>),
}

impl BuiltinFunction {
  pub(crate) fn call<'src>(
    self,
    payload: &BuiltinFunctionPayload<'src>,
  ) -> Result<Value<'src>, Error> {
    match self {
      Self::Fallible(function) => function(payload),
      Self::Infallible(function) => Ok(function(payload)),
    }
  }
}