Skip to main content

logtail_rust/struct/
log_schema.rs

1use crate::r#struct::betterstack_log_schema::BetterStackLogSchema;
2use crate::r#struct::env_config::EnvConfig;
3use crate::r#struct::log_level::LogLevel;
4
5#[derive(Debug)]
6pub struct LogSchema {
7    pub message: String,
8    pub context: String,
9}
10
11impl LogSchema {
12    pub fn to_betterstack(&self, env_config: &EnvConfig, level: LogLevel) -> BetterStackLogSchema {
13        BetterStackLogSchema::new(
14            env_config,
15            level,
16            self.message.clone(),
17            self.context.clone(),
18        )
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25    use crate::r#struct::env_config::{EnvConfig, EnvEnum};
26
27    fn test_config() -> EnvConfig {
28        EnvConfig {
29            app_version: "0.1.0".to_string(),
30            environment: EnvEnum::QA,
31            logs_source_token: "test-token".to_string(),
32            verbose: false,
33        }
34    }
35
36    #[test]
37    fn to_betterstack_maps_message() {
38        let log = LogSchema {
39            message: "hello world".to_string(),
40            context: "ctx".to_string(),
41        };
42        let result = log.to_betterstack(&test_config(), LogLevel::Info);
43        assert_eq!(result.message, "hello world");
44    }
45
46    #[test]
47    fn to_betterstack_maps_context() {
48        let log = LogSchema {
49            message: "msg".to_string(),
50            context: "file.rs:42".to_string(),
51        };
52        let result = log.to_betterstack(&test_config(), LogLevel::Info);
53        assert_eq!(result.context, "file.rs:42");
54    }
55
56    #[test]
57    fn to_betterstack_maps_level() {
58        let log = LogSchema {
59            message: "msg".to_string(),
60            context: "ctx".to_string(),
61        };
62
63        assert_eq!(
64            log.to_betterstack(&test_config(), LogLevel::Info).level,
65            LogLevel::Info
66        );
67        assert_eq!(
68            log.to_betterstack(&test_config(), LogLevel::Warn).level,
69            LogLevel::Warn
70        );
71        assert_eq!(
72            log.to_betterstack(&test_config(), LogLevel::Error).level,
73            LogLevel::Error
74        );
75        assert_eq!(
76            log.to_betterstack(&test_config(), LogLevel::Debug).level,
77            LogLevel::Debug
78        );
79    }
80
81    #[test]
82    fn to_betterstack_maps_env() {
83        let mut config = test_config();
84        config.environment = EnvEnum::Prod;
85
86        let log = LogSchema {
87            message: "msg".to_string(),
88            context: "ctx".to_string(),
89        };
90        let result = log.to_betterstack(&config, LogLevel::Info);
91        assert_eq!(result.env, EnvEnum::Prod);
92    }
93
94    #[test]
95    fn to_betterstack_maps_version() {
96        let mut config = test_config();
97        config.app_version = "3.2.1".to_string();
98
99        let log = LogSchema {
100            message: "msg".to_string(),
101            context: "ctx".to_string(),
102        };
103        let result = log.to_betterstack(&config, LogLevel::Info);
104        assert_eq!(result.app_version, "3.2.1");
105    }
106}