use crate::types::Value;
use crate::error::Error;
use super::arithmetic;
use super::logical;
use super::string;
use super::array;
use super::datetime;
use super::financial;
use super::statistical;
pub fn exec_builtin(name: &str, args: &[Value]) -> Result<Value, Error> {
if let Ok(result) = arithmetic::exec_arithmetic(name, args) {
return Ok(result);
}
if let Ok(result) = logical::exec_logical(name, args) {
return Ok(result);
}
if let Ok(result) = string::exec_string(name, args) {
return Ok(result);
}
if let Ok(result) = array::exec_array(name, args) {
return Ok(result);
}
if datetime::is_datetime_function(name) {
return datetime::exec_datetime(name, args);
}
if let Ok(result) = financial::exec_financial(name, args) {
return Ok(result);
}
if let Ok(result) = statistical::exec_statistical(name, args) {
return Ok(result);
}
match name {
_ => Err(Error::new(format!("Unknown function: {}", name), None)),
}
}