postgres-mumu 0.1.2

postgrtes-mumu is a plugin for the mumu ecosystem
Documentation
// src/lib.rs

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
}