use core_mumu::parser::interpreter::{DynamicFn, DynamicFnInfo, Interpreter};
use core_mumu::parser::types::{FunctionValue, Value};
use std::ffi::c_void;
use std::sync::{Arc, Mutex};
mod postgres;
pub use postgres::connect_bridge;
pub use postgres::query_bridge;
fn register_connect(interp: &mut Interpreter) {
let f: DynamicFn = Arc::new(Mutex::new(postgres::connect_bridge));
let info = DynamicFnInfo::new(f, false);
interp.register_dynamic_function_ex("pg:connect", info);
interp.set_variable(
"pg:connect",
Value::Function(Box::new(FunctionValue::Named("pg:connect".into()))),
);
}
fn register_query(interp: &mut Interpreter) {
let f: DynamicFn = Arc::new(Mutex::new(postgres::query_bridge));
let info = DynamicFnInfo::new(f, false);
interp.register_dynamic_function_ex("pg:query", info);
interp.set_variable(
"pg:query",
Value::Function(Box::new(FunctionValue::Named("pg:query".into()))),
);
}
#[no_mangle]
pub unsafe extern "C" fn Cargo_lock(
interp_ptr: *mut c_void,
_extra: *const c_void,
) -> i32 {
if interp_ptr.is_null() {
return -1;
}
let interp: &mut Interpreter = &mut *(interp_ptr as *mut Interpreter);
register_connect(interp);
register_query(interp);
0
}