use crate::extensions::prelude::HostWrapperError;
use clap_sys::ext::log::{CLAP_EXT_LOG, clap_host_log, clap_log_severity};
use clap_sys::host::clap_host;
use std::os::raw::c_char;
pub type ClapLoggingFn =
unsafe extern "C" fn(host: *const clap_host, severity: clap_log_severity, msg: *const c_char);
unsafe fn get_logger(host: *const clap_host) -> Option<ClapLoggingFn> {
let host = host.as_ref()?;
let log = host.get_extension?(host, CLAP_EXT_LOG.as_ptr()) as *mut clap_host_log;
log.as_ref()?.log
}
pub unsafe fn host_log(host: *const clap_host, e: &HostWrapperError) {
if let Some(logger) = get_logger(host) {
let cstr = e.format_cstr();
logger(host, e.severity(), cstr.as_ptr());
} else {
eprintln!("[CLAP_HOST_ERROR] {e}");
}
}