sustenet_shared/
config.rs

1pub mod master {
2    use config::{ Config, File, FileFormat::Toml };
3
4    use crate::utils::constants::MASTER_PORT;
5
6    pub struct Settings {
7        pub server_name: String,
8
9        pub max_connections: u32,
10        pub port: u16,
11    }
12
13    pub fn read() -> Settings {
14        let settings = Config::builder()
15            .add_source(File::new("Config.toml", Toml))
16            .build()
17            .expect("Failed to read the configuration file.");
18
19        Settings {
20            server_name: settings
21                .get::<String>("all.server_name")
22                .unwrap_or("Master Server".to_string()),
23
24            max_connections: settings.get::<u32>("all.max_connections").unwrap_or(0),
25            port: match settings.get::<u16>("all.port") {
26                Ok(port) =>
27                    match port {
28                        0 => MASTER_PORT,
29                        _ => port,
30                    }
31                Err(_) => MASTER_PORT,
32            },
33        }
34    }
35}
36
37pub mod cluster {
38    use config::{ Config, File, FileFormat::Toml };
39
40    use crate::utils::constants::{ CLUSTER_PORT, DEFAULT_IP, MASTER_PORT };
41
42    pub struct Settings {
43        pub server_name: String,
44
45        pub max_connections: u32,
46        pub port: u16,
47
48        pub key_name: String,
49        pub master_ip: String,
50        pub master_port: u16,
51
52        pub domain_pub_key: Option<String>,
53    }
54
55    pub fn read() -> Settings {
56        let settings = Config::builder()
57            .add_source(File::new("Config.toml", Toml))
58            .build()
59            .expect("Failed to read the configuration file.");
60
61        Settings {
62            server_name: settings
63                .get::<String>("all.server_name")
64                .unwrap_or("Cluster Server".to_string()),
65
66            max_connections: settings.get::<u32>("max_connections").unwrap_or(0),
67            port: match settings.get::<u16>("all.port") {
68                Ok(port) =>
69                    match port {
70                        0 => CLUSTER_PORT,
71                        _ => port,
72                    }
73                Err(_) => CLUSTER_PORT,
74            },
75
76            key_name: settings
77                .get::<String>("cluster.key_name")
78                .unwrap_or("cluster_key".to_string()),
79            master_ip: settings
80                .get::<String>("cluster.master_ip")
81                .unwrap_or(DEFAULT_IP.to_string()),
82            master_port: match settings.get::<u16>("cluster.master_port") {
83                Ok(port) =>
84                    match port {
85                        0 => MASTER_PORT,
86                        _ => port,
87                    }
88                Err(_) => MASTER_PORT,
89            },
90
91            domain_pub_key: match settings.get::<String>("cluster.domain_pub_key") {
92                Ok(domain) => Some(domain),
93                Err(_) => None,
94            },
95        }
96    }
97}