alpm-rs 0.1.6

aplm bindings and wrapper for rust
Documentation
use std::os::raw::c_char;

use super::{Handle,alpm_handle_t};
use crate::clib;

#[link(name="alpm")]
extern{
    fn alpm_option_set_logcb(handle : *mut alpm_handle_t, f: extern fn(i32, *mut c_char, va_list::VaList)) -> i32;
}


type LogCallback = fn(i32,String);

static mut LOG_CALLBACK : Option<LogCallback> = None;

extern "C" fn alpm_log_cb_handle(level: i32, fmt: *mut c_char, args: va_list::VaList){
        unsafe{
            if let Some(f) = LOG_CALLBACK{
            let out = clib::vsn_printf(fmt, args);
            f(level, out);
        }
    }
}

pub fn set_log_callback(h: &Handle, cb: LogCallback){
    unsafe{
        match LOG_CALLBACK{
            None => {
                alpm_option_set_logcb(h.alpm_handle, alpm_log_cb_handle);
            },
            _ => {},
        }
        LOG_CALLBACK = Some(cb);
    }
}