rust_web_server/entry_point/
mod.rs

1#[cfg(test)]
2mod tests;
3pub mod command_line_args;
4pub mod config_file;
5pub mod environment_variables;
6
7
8use std::{env};
9
10use crate::entry_point::command_line_args::{override_environment_variables_from_command_line_args};
11use crate::entry_point::config_file::override_environment_variables_from_config;
12use crate::entry_point::environment_variables::read_system_environment_variables;
13
14#[derive(PartialEq, Eq, Clone, Debug)]
15pub struct Config {}
16
17impl Config {
18    pub const RWS_CONFIG_IP: &'static str = "RWS_CONFIG_IP";
19    pub const RWS_CONFIG_IP_DEFAULT_VALUE: &'static str = "127.0.0.1";
20
21    pub const RWS_CONFIG_PORT: &'static str = "RWS_CONFIG_PORT";
22    pub const RWS_CONFIG_PORT_DEFAULT_VALUE: &'static str = "7878";
23
24    pub const RWS_CONFIG_THREAD_COUNT: &'static str = "RWS_CONFIG_THREAD_COUNT";
25    pub const RWS_CONFIG_THREAD_COUNT_DEFAULT_VALUE: &'static str = "200";
26
27    pub const RWS_CONFIG_CORS_ALLOW_ALL: &'static str = "RWS_CONFIG_CORS_ALLOW_ALL";
28    pub const RWS_CONFIG_CORS_ALLOW_ALL_DEFAULT_VALUE: &'static str = "true";
29
30    pub const RWS_CONFIG_CORS_ALLOW_ORIGINS: &'static str = "RWS_CONFIG_CORS_ALLOW_ORIGINS";
31    pub const RWS_CONFIG_CORS_ALLOW_ORIGINS_DEFAULT_VALUE: &'static str = "";
32
33    pub const RWS_CONFIG_CORS_ALLOW_CREDENTIALS: &'static str = "RWS_CONFIG_CORS_ALLOW_CREDENTIALS";
34    pub const RWS_CONFIG_CORS_ALLOW_CREDENTIALS_DEFAULT_VALUE: &'static str = "";
35
36    pub const RWS_CONFIG_CORS_ALLOW_HEADERS: &'static str = "RWS_CONFIG_CORS_ALLOW_HEADERS";
37    pub const RWS_CONFIG_CORS_ALLOW_HEADERS_DEFAULT_VALUE: &'static str = "";
38
39    pub const RWS_CONFIG_CORS_ALLOW_METHODS: &'static str = "RWS_CONFIG_CORS_ALLOW_METHODS";
40    pub const RWS_CONFIG_CORS_ALLOW_METHODS_DEFAULT_VALUE: &'static str = "";
41
42    pub const RWS_CONFIG_CORS_EXPOSE_HEADERS: &'static str = "RWS_CONFIG_CORS_EXPOSE_HEADERS";
43    pub const RWS_CONFIG_CORS_EXPOSE_HEADERS_DEFAULT_VALUE: &'static str = "";
44
45    pub const RWS_CONFIG_CORS_MAX_AGE: &'static str = "RWS_CONFIG_CORS_MAX_AGE";
46    pub const RWS_CONFIG_CORS_MAX_AGE_DEFAULT_VALUE: &'static str = "86400";
47
48    pub const RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES: &'static str = "RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES";
49    pub const RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES_DEFAULT_VALUE: &'static str = "10000";
50
51
52    pub const RWS_DEFAULT_IP: &'static str = "127.0.0.1";
53    pub const RWS_DEFAULT_PORT: &'static i32 = &7878;
54    pub const RWS_DEFAULT_THREAD_COUNT: &'static i32 = &200;
55    pub const RWS_DEFAULT_REQUEST_ALLOCATION_SIZE_IN_BYTES: &'static i64 = &10000;
56
57
58}
59
60pub fn bootstrap() {
61    read_system_environment_variables();
62    override_environment_variables_from_config(None);
63    override_environment_variables_from_command_line_args();
64}
65
66pub fn set_default_values() {
67    println!("  Initializing default values");
68
69    let is_var_set = env::var(Config::RWS_CONFIG_IP).is_ok();
70    if !is_var_set {
71        env::set_var(Config::RWS_CONFIG_IP, Config::RWS_CONFIG_IP_DEFAULT_VALUE);
72        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_IP, Config::RWS_CONFIG_IP_DEFAULT_VALUE);
73    } else {
74        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_IP);
75    }
76
77
78    let is_var_set = env::var(Config::RWS_CONFIG_PORT).is_ok();
79    if !is_var_set {
80        env::set_var(Config::RWS_CONFIG_PORT, Config::RWS_CONFIG_PORT_DEFAULT_VALUE);
81        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_PORT, Config::RWS_CONFIG_PORT_DEFAULT_VALUE);
82    } else {
83        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_PORT);
84    }
85
86    let is_var_set = env::var(Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES).is_ok();
87    if !is_var_set {
88        env::set_var(Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES, Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES_DEFAULT_VALUE);
89        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES, Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES_DEFAULT_VALUE);
90    } else {
91        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
92    }
93
94
95    let is_var_set = env::var(Config::RWS_CONFIG_THREAD_COUNT).is_ok();
96    if !is_var_set {
97        env::set_var(Config::RWS_CONFIG_THREAD_COUNT, Config::RWS_CONFIG_THREAD_COUNT_DEFAULT_VALUE);
98        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_THREAD_COUNT, Config::RWS_CONFIG_THREAD_COUNT_DEFAULT_VALUE);
99    } else {
100        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_THREAD_COUNT);
101    }
102
103    let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_ALL).is_ok();
104    if !is_var_set {
105        env::set_var(Config::RWS_CONFIG_CORS_ALLOW_ALL, Config::RWS_CONFIG_CORS_ALLOW_ALL_DEFAULT_VALUE);
106        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_ALL, Config::RWS_CONFIG_CORS_ALLOW_ALL_DEFAULT_VALUE);
107    } else {
108        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_ALL);
109    }
110
111
112    let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_ORIGINS).is_ok();
113    if !is_var_set {
114        env::set_var(Config::RWS_CONFIG_CORS_ALLOW_ORIGINS, Config::RWS_CONFIG_CORS_ALLOW_ORIGINS_DEFAULT_VALUE);
115        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_ORIGINS, Config::RWS_CONFIG_CORS_ALLOW_ORIGINS_DEFAULT_VALUE);
116    } else {
117        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_ORIGINS);
118    }
119
120    let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS).is_ok();
121    if !is_var_set {
122        env::set_var(Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS, Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS_DEFAULT_VALUE);
123        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS, Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS_DEFAULT_VALUE);
124    } else {
125        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS);
126    }
127
128    let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_HEADERS).is_ok();
129    if !is_var_set {
130        env::set_var(Config::RWS_CONFIG_CORS_ALLOW_HEADERS, Config::RWS_CONFIG_CORS_ALLOW_HEADERS_DEFAULT_VALUE);
131        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_HEADERS, Config::RWS_CONFIG_CORS_ALLOW_HEADERS_DEFAULT_VALUE);
132    } else {
133        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_HEADERS);
134    }
135
136
137    let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_METHODS).is_ok();
138    if !is_var_set {
139        env::set_var(Config::RWS_CONFIG_CORS_ALLOW_METHODS, Config::RWS_CONFIG_CORS_ALLOW_METHODS_DEFAULT_VALUE);
140        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_METHODS, Config::RWS_CONFIG_CORS_ALLOW_METHODS_DEFAULT_VALUE);
141    } else {
142        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_METHODS);
143    }
144
145    let is_var_set = env::var(Config::RWS_CONFIG_CORS_EXPOSE_HEADERS).is_ok();
146    if !is_var_set {
147        env::set_var(Config::RWS_CONFIG_CORS_EXPOSE_HEADERS, Config::RWS_CONFIG_CORS_EXPOSE_HEADERS_DEFAULT_VALUE);
148        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_CORS_EXPOSE_HEADERS, Config::RWS_CONFIG_CORS_EXPOSE_HEADERS_DEFAULT_VALUE);
149    } else {
150        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_CORS_EXPOSE_HEADERS);
151    }
152
153    let is_var_set = env::var(Config::RWS_CONFIG_CORS_MAX_AGE).is_ok();
154    if !is_var_set {
155        env::set_var(Config::RWS_CONFIG_CORS_MAX_AGE, Config::RWS_CONFIG_CORS_MAX_AGE_DEFAULT_VALUE);
156        println!("    Default value  for '{}' is '{}'", Config::RWS_CONFIG_CORS_MAX_AGE, Config::RWS_CONFIG_CORS_MAX_AGE_DEFAULT_VALUE);
157    } else {
158        println!("    There is an environment variable  for '{}', default value won't be set", Config::RWS_CONFIG_CORS_MAX_AGE);
159    }
160
161
162    println!("  End of initializing default values\n");
163}
164
165
166pub fn get_ip_port_thread_count() -> (String, i32, i32) {
167    let mut ip : String = Config::RWS_CONFIG_IP_DEFAULT_VALUE.to_string();
168    let mut port: i32 = *Config::RWS_DEFAULT_PORT;
169    let mut thread_count: i32 = *Config::RWS_DEFAULT_THREAD_COUNT;
170
171    let boxed_ip = env::var(Config::RWS_CONFIG_IP);
172    if boxed_ip.is_ok() {
173        ip = boxed_ip.unwrap()
174    }
175
176    let boxed_port = env::var(Config::RWS_CONFIG_PORT);
177    if boxed_port.is_ok() {
178        let _port = boxed_port.unwrap();
179        let boxed_parse = _port.parse::<i32>();
180        if boxed_parse.is_ok() {
181            port = boxed_parse.unwrap();
182        } else {
183            eprintln!("unable to parse port value, expected number, got {}, variable: {}",
184                      _port, Config::RWS_CONFIG_PORT);
185        }
186    } else {
187        eprintln!("unable to parse port value, variable: {}", Config::RWS_CONFIG_PORT);
188    }
189
190    let boxed_thread_count = env::var(Config::RWS_CONFIG_THREAD_COUNT);
191    if boxed_thread_count.is_ok() {
192        let _thread_count = boxed_thread_count.unwrap();
193        let boxed_parse = _thread_count.parse();
194        if boxed_parse.is_ok() {
195            thread_count = boxed_parse.unwrap()
196        } else {
197            eprintln!("unable to parse thread count value, expected number, got {}, variable: {}",
198                      thread_count, Config::RWS_CONFIG_THREAD_COUNT);
199        }
200
201    } else {
202        eprintln!("unable to parse thread count value, variable: {}", Config::RWS_CONFIG_THREAD_COUNT);
203    }
204
205    (ip, port, thread_count)
206}
207
208pub fn get_request_allocation_size() -> i64 {
209    let mut request_allocation_size: i64 = *Config::RWS_DEFAULT_REQUEST_ALLOCATION_SIZE_IN_BYTES;
210
211    let boxed_port = env::var(Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
212    if boxed_port.is_ok() {
213        let _request_allocation_size = boxed_port.unwrap();
214        let boxed_parse = _request_allocation_size.parse::<i64>();
215        if boxed_parse.is_ok() {
216            request_allocation_size = boxed_parse.unwrap();
217        } else {
218            eprintln!("unable to parse port value, expected number, got {}, variable: {}",
219                      _request_allocation_size, Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
220        }
221    } else {
222        eprintln!("unable to parse request allocation size value, variable: {}", Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
223    }
224
225
226    request_allocation_size
227}
228