use crate::types::*;
#[repr(C)]
#[derive(Clone, Copy)]
pub struct MemoryCallbacks {
pub alloc: extern "C" fn(size: usize) -> *mut u8,
pub free: extern "C" fn(ptr: *mut u8, size: usize),
pub realloc: extern "C" fn(ptr: *mut u8, old_size: usize, new_size: usize) -> *mut u8,
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct StateCallbacks {
pub get: extern "C" fn(
operator_id: u64,
ctx: *mut FFIContext,
key: *const u8,
key_len: usize,
output: *mut BufferFFI,
) -> i32,
pub set: extern "C" fn(
operator_id: u64,
ctx: *mut FFIContext,
key: *const u8,
key_len: usize,
value: *const u8,
value_len: usize,
) -> i32,
pub remove: extern "C" fn(operator_id: u64, ctx: *mut FFIContext, key: *const u8, key_len: usize) -> i32,
pub clear: extern "C" fn(operator_id: u64, ctx: *mut FFIContext) -> i32,
pub prefix: extern "C" fn(
operator_id: u64,
ctx: *mut FFIContext,
prefix: *const u8,
prefix_len: usize,
iterator_out: *mut *mut StateIteratorFFI,
) -> i32,
pub iterator_next: extern "C" fn(
iterator: *mut StateIteratorFFI,
key_out: *mut BufferFFI,
value_out: *mut BufferFFI,
) -> i32,
pub iterator_free: extern "C" fn(iterator: *mut StateIteratorFFI),
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct LogCallbacks {
pub message: extern "C" fn(operator_id: u64, level: u32, message: *const u8, message_len: usize),
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct StoreCallbacks {
pub get: extern "C" fn(ctx: *mut FFIContext, key: *const u8, key_len: usize, output: *mut BufferFFI) -> i32,
pub contains_key: extern "C" fn(ctx: *mut FFIContext, key: *const u8, key_len: usize, result: *mut u8) -> i32,
pub prefix: extern "C" fn(
ctx: *mut FFIContext,
prefix: *const u8,
prefix_len: usize,
iterator_out: *mut *mut StoreIteratorFFI,
) -> i32,
pub range: extern "C" fn(
ctx: *mut FFIContext,
start: *const u8,
start_len: usize,
start_bound_type: u8,
end: *const u8,
end_len: usize,
end_bound_type: u8,
iterator_out: *mut *mut StoreIteratorFFI,
) -> i32,
pub iterator_next: extern "C" fn(
iterator: *mut StoreIteratorFFI,
key_out: *mut BufferFFI,
value_out: *mut BufferFFI,
) -> i32,
pub iterator_free: extern "C" fn(iterator: *mut StoreIteratorFFI),
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct CatalogCallbacks {
pub find_namespace: extern "C" fn(
ctx: *mut FFIContext,
namespace_id: u64,
version: u64,
output: *mut crate::ffi::FFINamespaceDef,
) -> i32,
pub find_namespace_by_name: extern "C" fn(
ctx: *mut FFIContext,
name_ptr: *const u8,
name_len: usize,
version: u64,
output: *mut crate::ffi::FFINamespaceDef,
) -> i32,
pub find_table: extern "C" fn(
ctx: *mut FFIContext,
table_id: u64,
version: u64,
output: *mut crate::ffi::FFITableDef,
) -> i32,
pub find_table_by_name: extern "C" fn(
ctx: *mut FFIContext,
namespace_id: u64,
name_ptr: *const u8,
name_len: usize,
version: u64,
output: *mut crate::ffi::FFITableDef,
) -> i32,
pub free_namespace: extern "C" fn(namespace: *mut crate::ffi::FFINamespaceDef),
pub free_table: extern "C" fn(table: *mut crate::ffi::FFITableDef),
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct HostCallbacks {
pub memory: MemoryCallbacks,
pub state: StateCallbacks,
pub log: LogCallbacks,
pub store: StoreCallbacks,
pub catalog: CatalogCallbacks,
}