Skip to main content

syslog_too/
facility.rs

1//! Definitions for interfacing with the syslog facility.
2
3use std::str::FromStr;
4
5#[allow(non_camel_case_types)]
6#[derive(Copy, Clone, Debug)]
7pub enum Facility {
8    LOG_KERN = 0 << 3,
9    LOG_USER = 1 << 3,
10    LOG_MAIL = 2 << 3,
11    LOG_DAEMON = 3 << 3,
12    LOG_AUTH = 4 << 3,
13    LOG_SYSLOG = 5 << 3,
14    LOG_LPR = 6 << 3,
15    LOG_NEWS = 7 << 3,
16    LOG_UUCP = 8 << 3,
17    LOG_CRON = 9 << 3,
18    LOG_AUTHPRIV = 10 << 3,
19    LOG_FTP = 11 << 3,
20    LOG_NTP = 12 << 3,
21    LOG_AUDIT = 13 << 3,
22    LOG_ALERT = 14 << 3,
23    LOG_CLOCK_DAEMON = 15 << 3,
24    LOG_LOCAL0 = 16 << 3,
25    LOG_LOCAL1 = 17 << 3,
26    LOG_LOCAL2 = 18 << 3,
27    LOG_LOCAL3 = 19 << 3,
28    LOG_LOCAL4 = 20 << 3,
29    LOG_LOCAL5 = 21 << 3,
30    LOG_LOCAL6 = 22 << 3,
31    LOG_LOCAL7 = 23 << 3,
32}
33
34impl FromStr for Facility {
35    type Err = ();
36    fn from_str(s: &str) -> Result<Facility, ()> {
37        let result = match &s.to_lowercase()[..] {
38            "log_kern" | "kern" => Facility::LOG_KERN,
39            "log_user" | "user" => Facility::LOG_USER,
40            "log_mail" | "mail" => Facility::LOG_MAIL,
41            "log_daemon" | "daemon" => Facility::LOG_DAEMON,
42            "log_auth" | "auth" => Facility::LOG_AUTH,
43            "log_syslog" | "syslog" => Facility::LOG_SYSLOG,
44            "log_lpr" | "lpr" => Facility::LOG_LPR,
45            "log_news" | "news" => Facility::LOG_NEWS,
46            "log_uucp" | "uucp" => Facility::LOG_UUCP,
47            "log_cron" | "cron" => Facility::LOG_CRON,
48            "log_authpriv" | "authpriv" => Facility::LOG_AUTHPRIV,
49            "log_ftp" | "ftp" => Facility::LOG_FTP,
50            "log_ntp" | "ntp" => Facility::LOG_NTP,
51            "log_audit" | "audit" => Facility::LOG_AUDIT,
52            "log_alert" | "alert" => Facility::LOG_ALERT,
53            "log_clock_daemon" | "clock_daemon" => Facility::LOG_CLOCK_DAEMON,
54            "log_local0" | "local0" => Facility::LOG_LOCAL0,
55            "log_local1" | "local1" => Facility::LOG_LOCAL1,
56            "log_local2" | "local2" => Facility::LOG_LOCAL2,
57            "log_local3" | "local3" => Facility::LOG_LOCAL3,
58            "log_local4" | "local4" => Facility::LOG_LOCAL4,
59            "log_local5" | "local5" => Facility::LOG_LOCAL5,
60            "log_local6" | "local6" => Facility::LOG_LOCAL6,
61            "log_local7" | "local7" => Facility::LOG_LOCAL7,
62            _ => return Err(()),
63        };
64        Ok(result)
65    }
66}
67
68impl Default for Facility {
69    /// Returns the default `Facility`, which is `LOG_USER` (as [specified by POSIX]).
70    ///
71    /// [specified by POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/closelog.html
72    fn default() -> Self {
73        Facility::LOG_USER
74    }
75}