#![allow(unsafe_code)]
use crate::panic_guard::FfiBoundary;
use crate::runtime::{EngineContext, FfiPtr};
use crate::sys;
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__create(
ctx: *mut EngineContext,
name: *const u8,
name_len: usize,
table_def: *const sys::DdTable,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
let name = unsafe { FfiPtr::bytes_to_str(name, name_len) }?;
let table_def = unsafe { table_def.as_ref() };
engine.create(name, table_def)
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__open(
ctx: *mut EngineContext,
name: *const u8,
name_len: usize,
mode: i32,
table_def: *const sys::DdTable,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
let name = unsafe { FfiPtr::bytes_to_str(name, name_len) }?;
let table_def = unsafe { table_def.as_ref() };
engine.open(name, mode, table_def)
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__close(ctx: *mut EngineContext) -> i32 {
FfiBoundary::run(|| {
unsafe { &mut *ctx }.engine_mut().close()
})
}