use std::ffi::CStr;
use transcribe_cpp_sys as sys;
extern "C" fn log_trampoline(
level: sys::transcribe_log_level,
msg: *const std::os::raw::c_char,
_userdata: *mut std::os::raw::c_void,
) {
if msg.is_null() {
return;
}
let text = unsafe { CStr::from_ptr(msg) }.to_string_lossy();
let text = text.trim_end_matches('\n');
use sys::transcribe_log_level as L;
let level = match level {
L::TRANSCRIBE_LOG_LEVEL_ERROR => log::Level::Error,
L::TRANSCRIBE_LOG_LEVEL_WARN => log::Level::Warn,
L::TRANSCRIBE_LOG_LEVEL_DEBUG => log::Level::Debug,
L::TRANSCRIBE_LOG_LEVEL_INFO | L::TRANSCRIBE_LOG_LEVEL_CONT => log::Level::Info,
_ => return,
};
log::log!(target: "transcribe_cpp", level, "{text}");
}
pub fn init_logging() {
unsafe { sys::transcribe_log_set(Some(log_trampoline), std::ptr::null_mut()) };
}
pub fn disable_logging() {
unsafe { sys::transcribe_log_set(None, std::ptr::null_mut()) };
}