use std::panic::{RefUnwindSafe, UnwindSafe};
use rusqlite::functions::{Aggregate, Context, SqlFnOutput};
use rusqlite::{Connection, Result};
use crate::FunctionOptions;
pub fn register_scalar<F, T>(
connection: &Connection,
options: FunctionOptions,
callback: F,
) -> Result<()>
where
F: Fn(&Context<'_>) -> Result<T> + Send + 'static,
T: SqlFnOutput,
{
let (name, arity, flags) = options.into_parts();
connection.create_scalar_function(name.as_str(), arity, flags, callback)
}
pub fn register_aggregate<A, D, T>(
connection: &Connection,
options: FunctionOptions,
aggregate: D,
) -> Result<()>
where
A: RefUnwindSafe + UnwindSafe,
D: Aggregate<A, T> + 'static,
T: SqlFnOutput,
{
let (name, arity, flags) = options.into_parts();
connection.create_aggregate_function(name.as_str(), arity, flags, aggregate)
}