collectd_plugin/de/
level.rs1use crate::api::LogLevel;
2use serde::de::{self, Deserialize, Deserializer, Visitor};
3use std::fmt;
4
5struct LogLevelVisitor;
6
7impl Visitor<'_> for LogLevelVisitor {
8 type Value = LogLevel;
9
10 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
11 formatter.write_str("ERROR | WARN | INFO | DEBUG | NOTICE")
12 }
13
14 fn visit_str<E>(self, s: &str) -> Result<LogLevel, E>
15 where
16 E: de::Error,
17 {
18 let upper = s.to_ascii_uppercase();
19 match upper.as_str() {
20 "INFO" => Ok(LogLevel::Info),
21 "DEBUG" => Ok(LogLevel::Debug),
22 "ERR" | "ERROR" => Ok(LogLevel::Error),
23 "WARN" | "WARNING" => Ok(LogLevel::Warning),
24 "NOTICE" => Ok(LogLevel::Notice),
25 x => Err(E::custom(format!("Did not expect log level of: {}", x))),
26 }
27 }
28}
29
30impl<'de> Deserialize<'de> for LogLevel {
31 fn deserialize<D>(deserializer: D) -> Result<LogLevel, D::Error>
32 where
33 D: Deserializer<'de>,
34 {
35 deserializer.deserialize_str(LogLevelVisitor)
36 }
37}