1use core_mumu::parser::interpreter::{DynamicFn, DynamicFnInfo, Interpreter};
4use core_mumu::parser::types::{FunctionValue, Value};
5use std::ffi::c_void;
6use std::sync::{Arc, Mutex};
7
8mod postgres;
9
10pub use postgres::connect_bridge;
11pub use postgres::query_bridge;
12
13fn register_connect(interp: &mut Interpreter) {
14 let f: DynamicFn = Arc::new(Mutex::new(postgres::connect_bridge));
15 let info = DynamicFnInfo::new(f, false);
16 interp.register_dynamic_function_ex("pg:connect", info);
17 interp.set_variable(
18 "pg:connect",
19 Value::Function(Box::new(FunctionValue::Named("pg:connect".into()))),
20 );
21}
22
23fn register_query(interp: &mut Interpreter) {
24 let f: DynamicFn = Arc::new(Mutex::new(postgres::query_bridge));
25 let info = DynamicFnInfo::new(f, false);
26 interp.register_dynamic_function_ex("pg:query", info);
27 interp.set_variable(
28 "pg:query",
29 Value::Function(Box::new(FunctionValue::Named("pg:query".into()))),
30 );
31}
32
33#[no_mangle]
34pub unsafe extern "C" fn Cargo_lock(
35 interp_ptr: *mut c_void,
36 _extra: *const c_void,
37) -> i32 {
38 if interp_ptr.is_null() {
39 return -1;
40 }
41 let interp: &mut Interpreter = &mut *(interp_ptr as *mut Interpreter);
42 register_connect(interp);
43 register_query(interp);
44 0
45}