integrationos_domain/domain/configuration/
database.rs1use std::fmt::{Display, Formatter};
2
3use envconfig::Envconfig;
4
5#[derive(Envconfig, Clone)] pub struct DatabaseConfig {
7 #[envconfig(from = "CONTROL_DATABASE_URL", default = "mongodb://localhost:27017")]
8 pub control_db_url: String,
9 #[envconfig(from = "CONTROL_DATABASE_NAME", default = "database")]
10 pub control_db_name: String,
11 #[envconfig(from = "UDM_DATABASE_URL", default = "mongodb://localhost:27017")]
12 pub udm_db_url: String,
13 #[envconfig(from = "UDM_DATABASE_NAME", default = "udm")]
14 pub udm_db_name: String,
15 #[envconfig(from = "EVENT_DATABASE_URL", default = "mongodb://localhost:27017")]
16 pub event_db_url: String,
17 #[envconfig(from = "EVENT_DATABASE_NAME", default = "database")]
18 pub event_db_name: String,
19 #[envconfig(from = "CONTEXT_DATABASE_URL", default = "mongodb://localhost:27017")]
20 pub context_db_url: String,
21 #[envconfig(from = "CONTEXT_DATABASE_NAME", default = "database")]
22 pub context_db_name: String,
23 #[envconfig(from = "CONTEXT_COLLECTION_NAME", default = "event-transactions")]
24 pub context_collection_name: String,
25}
26
27impl DatabaseConfig {
28 pub fn new() -> Self {
29 Self::default()
30 }
31}
32
33impl Default for DatabaseConfig {
34 fn default() -> Self {
35 Self {
36 control_db_url: "mongodb://localhost:27017".to_owned(),
37 control_db_name: "database".to_owned(),
38 udm_db_url: "mongodb://localhost:27017".to_owned(),
39 udm_db_name: "udm".to_owned(),
40 event_db_url: "mongodb://localhost:27017".to_owned(),
41 event_db_name: "database".to_owned(),
42 context_db_url: "mongodb://localhost:27017".to_owned(),
43 context_db_name: "database".to_owned(),
44 context_collection_name: "event-transactions".to_owned(),
45 }
46 }
47}
48
49impl Display for DatabaseConfig {
50 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
51 writeln!(f, "CONTROL_DATABASE_URL: ****")?;
52 writeln!(f, "CONTROL_DATABASE_NAME: {}", self.control_db_name)?;
53 writeln!(f, "UDM_DATABASE_URL: ****")?;
54 writeln!(f, "UDM_DATABASE_NAME: {}", self.udm_db_name)?;
55 writeln!(f, "EVENT_DATABASE_URL: ****")?;
56 writeln!(f, "EVENT_DATABASE_NAME: {}", self.event_db_name)?;
57 writeln!(f, "CONTEXT_DATABASE_URL: ****")?;
58 writeln!(f, "CONTEXT_DATABASE_NAME: {}", self.context_db_name)?;
59 writeln!(
60 f,
61 "CONTEXT_COLLECTION_NAME: {}",
62 self.context_collection_name
63 )
64 }
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[tokio::test]
72 async fn test_config() {
73 let config = DatabaseConfig::new();
74
75 assert_eq!(
76 config.control_db_url,
77 "mongodb://localhost:27017".to_owned()
78 );
79 assert_eq!(config.control_db_name, "database".to_owned());
80 assert_eq!(config.event_db_url, "mongodb://localhost:27017".to_owned());
81 assert_eq!(config.event_db_name, "database".to_owned());
82 assert_eq!(
83 config.context_db_url,
84 "mongodb://localhost:27017".to_owned()
85 );
86 assert_eq!(config.context_db_name, "database".to_owned());
87 assert_eq!(
88 config.context_collection_name,
89 "event-transactions".to_owned()
90 );
91 }
92
93 #[tokio::test]
94 async fn test_config_display() {
95 let config = DatabaseConfig::new();
96
97 let config_str = format!("{config}");
98
99 let display = "CONTROL_DATABASE_URL: ****\n\
100 CONTROL_DATABASE_NAME: database\n\
101 UDM_DATABASE_URL: ****\n\
102 UDM_DATABASE_NAME: udm\n\
103 EVENT_DATABASE_URL: ****\n\
104 EVENT_DATABASE_NAME: database\n\
105 CONTEXT_DATABASE_URL: ****\n\
106 CONTEXT_DATABASE_NAME: database\n\
107 CONTEXT_COLLECTION_NAME: event-transactions\n\
108 ";
109
110 assert_eq!(config_str, display);
111 }
112}