mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-26 20:44:23 +01:00
39 lines
1.0 KiB
Rust
39 lines
1.0 KiB
Rust
use crate::{ResultCode, Value};
|
|
use std::{
|
|
ffi::{c_char, c_void},
|
|
fmt::Display,
|
|
};
|
|
|
|
pub type ScalarFunction = unsafe extern "C" fn(argc: i32, *const Value) -> Value;
|
|
|
|
pub type RegisterScalarFn =
|
|
unsafe extern "C" fn(ctx: *mut c_void, name: *const c_char, func: ScalarFunction) -> ResultCode;
|
|
|
|
pub type RegisterAggFn = unsafe extern "C" fn(
|
|
ctx: *mut c_void,
|
|
name: *const c_char,
|
|
args: i32,
|
|
init: InitAggFunction,
|
|
step: StepFunction,
|
|
finalize: FinalizeFunction,
|
|
) -> ResultCode;
|
|
|
|
pub type InitAggFunction = unsafe extern "C" fn() -> *mut AggCtx;
|
|
pub type StepFunction = unsafe extern "C" fn(ctx: *mut AggCtx, argc: i32, argv: *const Value);
|
|
pub type FinalizeFunction = unsafe extern "C" fn(ctx: *mut AggCtx) -> Value;
|
|
|
|
#[repr(C)]
|
|
pub struct AggCtx {
|
|
pub state: *mut c_void,
|
|
}
|
|
|
|
pub trait AggFunc {
|
|
type State: Default;
|
|
type Error: Display;
|
|
const NAME: &'static str;
|
|
const ARGS: i32;
|
|
|
|
fn step(state: &mut Self::State, args: &[Value]);
|
|
fn finalize(state: Self::State) -> Result<Value, Self::Error>;
|
|
}
|