use regex::Regex;
mod entry;
pub use crate::entry::Entry;
mod error;
pub use crate::error::{
invalid_facility_error, invalid_prival_error, invalid_severity_error, perror, StumplessError,
};
mod facility;
pub use crate::facility::Facility;
mod file;
pub use crate::file::FileTarget;
mod severity;
pub use crate::severity::Severity;
mod stream;
pub use crate::stream::StreamTarget;
mod target;
pub use crate::target::{DefaultTarget, Target};
#[cfg(feature = "journald")]
mod journald;
#[cfg(feature = "journald")]
pub use crate::journald::JournaldTarget;
#[cfg(feature = "network")]
mod network;
#[cfg(feature = "network")]
pub use crate::network::NetworkTarget;
#[cfg(feature = "socket")]
mod socket;
#[cfg(feature = "socket")]
pub use crate::socket::SocketTarget;
#[cfg(feature = "wel")]
mod wel;
#[cfg(feature = "wel")]
pub use crate::wel::{add_default_wel_event_source, WelTarget};
pub fn prival_from_string(priority: &str) -> Result<i32, StumplessError> {
if let Ok(prival) = priority.parse::<i32>() {
if (0..=191).contains(&prival) {
return Ok(prival);
}
}
let priority_re = Regex::new(r"^(\w+).(\w+)$").unwrap();
match priority_re.captures(priority) {
Some(caps) => {
let facility = match caps.get(1).unwrap().as_str() {
"kern" => 0,
"user" => 1,
"mail" => 2,
"daemon" => 3,
"auth" | "security" => 4,
"syslog" => 5,
"lpr" => 6,
"news" => 7,
"uucp" => 8,
"cron" => 9,
"authpriv" => 10,
"ftp" => 11,
"ntp" => 12,
"local0" => 16,
"local1" => 17,
"local2" => 18,
"local3" => 19,
"local4" => 20,
"local5" => 21,
"local6" => 22,
"local7" => 23,
_ => {
return Err(invalid_facility_error());
}
};
let severity = match caps.get(2).unwrap().as_str() {
"emerg" | "panic" => 0,
"alert" => 1,
"crit" => 2,
"err" | "error" => 3,
"warning" | "warn" => 4,
"notice" => 5,
"info" => 6,
"debug" => 7,
_ => {
return Err(invalid_severity_error());
}
};
Ok((facility * 8) + severity)
}
None => Err(invalid_prival_error()),
}
}