use crate::array::*;
use crate::types::{DataType, NativeType};
pub mod abs;
pub mod add;
pub mod binary;
pub mod ctx;
pub mod repeat;
pub mod unary;
pub use self::abs::*;
pub use self::add::*;
pub use self::binary::*;
pub use self::ctx::*;
pub use self::repeat::*;
pub use self::unary::*;
#[derive(thiserror::Error, Debug, PartialEq, Eq, Clone)]
pub enum FunctionError {
#[error("invalid parameters {0}")]
InvalidParameters(String),
#[error("invalid datatypes {0}")]
InvalidDataTypes(String),
#[error("overflow")]
Overflow,
}
pub trait Function: Send + Sync {
fn name(&self) -> &str;
fn return_types(&self) -> DataType;
fn execute(&self, input: &[&ArrayImpl]) -> Result<ArrayImpl, FunctionError>;
}