pub mod aggregate;
pub mod combinatorics;
pub mod criteria_aggregates;
pub mod numeric;
pub mod reduction;
pub mod trig;
#[cfg(test)]
pub use aggregate::*;
#[cfg(test)]
pub use trig::*;
pub(super) enum AggregateArgument<'a> {
Range(crate::engine::range_view::RangeView<'a>),
Scalar(formualizer_common::LiteralValue),
ReferenceError(formualizer_common::ExcelError),
}
pub(super) fn resolve_aggregate_argument<'a, 'b>(
arg: &crate::traits::ArgumentHandle<'a, 'b>,
_ctx: &dyn crate::traits::FunctionContext<'b>,
) -> Result<AggregateArgument<'b>, formualizer_common::ExcelError> {
use crate::traits::{CalcValue, ResolvedArgument};
match arg.resolve_once()? {
ResolvedArgument::Range(view) | ResolvedArgument::Value(CalcValue::Range(view)) => {
Ok(AggregateArgument::Range(view))
}
ResolvedArgument::ReferenceError(error) => Ok(AggregateArgument::ReferenceError(error)),
ResolvedArgument::Value(value) => Ok(AggregateArgument::Scalar(value.into_literal())),
}
}
pub fn register_builtins() {
aggregate::register_builtins();
combinatorics::register_builtins();
criteria_aggregates::register_builtins();
reduction::register_builtins();
numeric::register_builtins();
trig::register_builtins();
}