logtail_rust/struct/
log_schema.rs1use 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}