rgen_utils/
types.rs

1use serde::{Deserialize, Serialize};
2
3use crate::error::Result;
4use std::str::FromStr;
5
6#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
7pub enum LogLevel {
8    #[serde(rename = "debug")]
9    Debug,
10    #[serde(rename = "info")]
11    Info,
12    #[serde(rename = "warn")]
13    Warn,
14    #[serde(rename = "error")]
15    Error,
16}
17
18impl std::fmt::Display for LogLevel {
19    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
20        let s = match *self {
21            LogLevel::Debug => "debug",
22            LogLevel::Info => "info",
23            LogLevel::Warn => "warn",
24            LogLevel::Error => "error",
25        };
26        write!(f, "{}", s)
27    }
28}
29
30impl FromStr for LogLevel {
31    type Err = crate::error::Error;
32
33    fn from_str(s: &str) -> Result<Self> {
34        match s {
35            "debug" => Ok(LogLevel::Debug),
36            "info" => Ok(LogLevel::Info),
37            "warn" => Ok(LogLevel::Warn),
38            "error" => Ok(LogLevel::Error),
39            _ => Ok(LogLevel::Info),
40        }
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47
48    #[test]
49    fn test_log_level_display() {
50        assert_eq!(LogLevel::Debug.to_string(), "debug");
51        assert_eq!(LogLevel::Info.to_string(), "info");
52        assert_eq!(LogLevel::Warn.to_string(), "warn");
53        assert_eq!(LogLevel::Error.to_string(), "error");
54    }
55
56    #[test]
57    fn test_log_level_from_str() {
58        assert_eq!(LogLevel::from_str("debug").unwrap(), LogLevel::Debug);
59        assert_eq!(LogLevel::from_str("info").unwrap(), LogLevel::Info);
60        assert_eq!(LogLevel::from_str("warn").unwrap(), LogLevel::Warn);
61        assert_eq!(LogLevel::from_str("error").unwrap(), LogLevel::Error);
62
63        // Default case
64        assert_eq!(LogLevel::from_str("invalid").unwrap(), LogLevel::Info);
65        assert_eq!(LogLevel::from_str("").unwrap(), LogLevel::Info);
66    }
67
68    #[test]
69    fn test_log_level_serialization() {
70        // Test serialization
71        let debug_json = serde_json::to_string(&LogLevel::Debug).unwrap();
72        assert_eq!(debug_json, "\"debug\"");
73
74        let info_json = serde_json::to_string(&LogLevel::Info).unwrap();
75        assert_eq!(info_json, "\"info\"");
76    }
77
78    #[test]
79    fn test_log_level_deserialization() {
80        // Test deserialization
81        let debug: LogLevel = serde_json::from_str("\"debug\"").unwrap();
82        assert_eq!(debug, LogLevel::Debug);
83
84        let info: LogLevel = serde_json::from_str("\"info\"").unwrap();
85        assert_eq!(info, LogLevel::Info);
86    }
87
88    #[test]
89    fn test_log_level_debug() {
90        let debug = LogLevel::Debug;
91        let debug_str = format!("{:?}", debug);
92        assert!(debug_str.contains("Debug"));
93    }
94}