use stumpless_sys::{stumpless_get_error, stumpless_perror};
use std::error::Error;
use std::ffi::{CStr, CString};
use std::fmt;
#[derive(Debug, Clone)]
pub struct StumplessError {
message: &'static str,
}
impl Error for StumplessError {}
impl fmt::Display for StumplessError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(self.message)
}
}
pub fn invalid_facility_error() -> StumplessError {
StumplessError {
message: "invalid facility name",
}
}
pub fn invalid_prival_error() -> StumplessError {
StumplessError {
message: "invalid prival format",
}
}
pub fn invalid_severity_error() -> StumplessError {
StumplessError {
message: "invalid severity name",
}
}
pub fn last_error() -> Result<(), StumplessError> {
let err = unsafe { stumpless_get_error() };
if err.is_null() {
Ok(())
} else {
Err(StumplessError {
message: unsafe { CStr::from_ptr((*err).message).to_str().unwrap() },
})
}
}
pub fn perror(prefix: &str) {
let c_prefix = CString::new(prefix).expect("couldn't make a C string");
unsafe { stumpless_perror(c_prefix.as_ptr()) }
}