1 use std::str::FromStr; 2 3 #[allow(non_camel_case_types)] 4 #[derive(Copy,Clone,Debug)] 5 pub enum Facility { 6 LOG_KERN = 0 << 3, 7 LOG_USER = 1 << 3, 8 LOG_MAIL = 2 << 3, 9 LOG_DAEMON = 3 << 3, 10 LOG_AUTH = 4 << 3, 11 LOG_SYSLOG = 5 << 3, 12 LOG_LPR = 6 << 3, 13 LOG_NEWS = 7 << 3, 14 LOG_UUCP = 8 << 3, 15 LOG_CRON = 9 << 3, 16 LOG_AUTHPRIV = 10 << 3, 17 LOG_FTP = 11 << 3, 18 LOG_LOCAL0 = 16 << 3, 19 LOG_LOCAL1 = 17 << 3, 20 LOG_LOCAL2 = 18 << 3, 21 LOG_LOCAL3 = 19 << 3, 22 LOG_LOCAL4 = 20 << 3, 23 LOG_LOCAL5 = 21 << 3, 24 LOG_LOCAL6 = 22 << 3, 25 LOG_LOCAL7 = 23 << 3 26 } 27 28 impl FromStr for Facility { 29 type Err = (); from_str(s: &str) -> Result<Facility, ()>30 fn from_str(s: &str) -> Result<Facility, ()> { 31 let result = match &s.to_lowercase()[..] { 32 "log_kern" | "kern" => Facility::LOG_KERN, 33 "log_user" | "user" => Facility::LOG_USER, 34 "log_mail" | "mail" => Facility::LOG_MAIL, 35 "log_daemon" | "daemon" => Facility::LOG_DAEMON, 36 "log_auth" | "auth" => Facility::LOG_AUTH, 37 "log_syslog" | "syslog" => Facility::LOG_SYSLOG, 38 "log_lpr" | "lpr" => Facility::LOG_LPR, 39 "log_news" | "news" => Facility::LOG_NEWS, 40 "log_uucp" | "uucp" => Facility::LOG_UUCP, 41 "log_cron" | "cron" => Facility::LOG_CRON, 42 "log_authpriv"| "authpriv" => Facility::LOG_AUTHPRIV, 43 "log_ftp" | "ftp" => Facility::LOG_FTP, 44 "log_local0" | "local0" => Facility::LOG_LOCAL0, 45 "log_local1" | "local1" => Facility::LOG_LOCAL1, 46 "log_local2" | "local2" => Facility::LOG_LOCAL2, 47 "log_local3" | "local3" => Facility::LOG_LOCAL3, 48 "log_local4" | "local4" => Facility::LOG_LOCAL4, 49 "log_local5" | "local5" => Facility::LOG_LOCAL5, 50 "log_local6" | "local6" => Facility::LOG_LOCAL6, 51 "log_local7" | "local7" => Facility::LOG_LOCAL7, 52 _ => return Err(()) 53 }; 54 Ok(result) 55 } 56 } 57