mumupostgres/
lib.rs

1// src/lib.rs
2
3use 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}