rust_web_server/entry_point/
mod.rs1#[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 pub const RWS_CONFIG_TLS_CERT_FILE: &'static str = "RWS_CONFIG_TLS_CERT_FILE";
52 pub const RWS_CONFIG_TLS_CERT_FILE_DEFAULT_VALUE: &'static str = "";
53
54 pub const RWS_CONFIG_TLS_KEY_FILE: &'static str = "RWS_CONFIG_TLS_KEY_FILE";
55 pub const RWS_CONFIG_TLS_KEY_FILE_DEFAULT_VALUE: &'static str = "";
56
57 pub const RWS_CONFIG_HTTP_REDIRECT_PORT: &'static str = "RWS_CONFIG_HTTP_REDIRECT_PORT";
60 pub const RWS_CONFIG_HTTP_REDIRECT_PORT_DEFAULT_VALUE: &'static str = "";
61
62
63 pub const RWS_DEFAULT_IP: &'static str = "127.0.0.1";
64 pub const RWS_DEFAULT_PORT: &'static i32 = &7878;
65 pub const RWS_DEFAULT_THREAD_COUNT: &'static i32 = &200;
66 pub const RWS_DEFAULT_REQUEST_ALLOCATION_SIZE_IN_BYTES: &'static i64 = &10000;
67
68
69}
70
71pub fn bootstrap() {
72 read_system_environment_variables();
73 override_environment_variables_from_config(None);
74 override_environment_variables_from_command_line_args();
75}
76
77pub fn set_default_values() {
78 println!(" Initializing default values");
79
80 let is_var_set = env::var(Config::RWS_CONFIG_IP).is_ok();
81 if !is_var_set {
82 env::set_var(Config::RWS_CONFIG_IP, Config::RWS_CONFIG_IP_DEFAULT_VALUE);
83 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_IP, Config::RWS_CONFIG_IP_DEFAULT_VALUE);
84 } else {
85 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_IP);
86 }
87
88
89 let is_var_set = env::var(Config::RWS_CONFIG_PORT).is_ok();
90 if !is_var_set {
91 env::set_var(Config::RWS_CONFIG_PORT, Config::RWS_CONFIG_PORT_DEFAULT_VALUE);
92 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_PORT, Config::RWS_CONFIG_PORT_DEFAULT_VALUE);
93 } else {
94 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_PORT);
95 }
96
97 let is_var_set = env::var(Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES).is_ok();
98 if !is_var_set {
99 env::set_var(Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES, Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES_DEFAULT_VALUE);
100 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES, Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES_DEFAULT_VALUE);
101 } else {
102 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
103 }
104
105
106 let is_var_set = env::var(Config::RWS_CONFIG_THREAD_COUNT).is_ok();
107 if !is_var_set {
108 env::set_var(Config::RWS_CONFIG_THREAD_COUNT, Config::RWS_CONFIG_THREAD_COUNT_DEFAULT_VALUE);
109 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_THREAD_COUNT, Config::RWS_CONFIG_THREAD_COUNT_DEFAULT_VALUE);
110 } else {
111 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_THREAD_COUNT);
112 }
113
114 let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_ALL).is_ok();
115 if !is_var_set {
116 env::set_var(Config::RWS_CONFIG_CORS_ALLOW_ALL, Config::RWS_CONFIG_CORS_ALLOW_ALL_DEFAULT_VALUE);
117 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_ALL, Config::RWS_CONFIG_CORS_ALLOW_ALL_DEFAULT_VALUE);
118 } else {
119 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_ALL);
120 }
121
122
123 let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_ORIGINS).is_ok();
124 if !is_var_set {
125 env::set_var(Config::RWS_CONFIG_CORS_ALLOW_ORIGINS, Config::RWS_CONFIG_CORS_ALLOW_ORIGINS_DEFAULT_VALUE);
126 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_ORIGINS, Config::RWS_CONFIG_CORS_ALLOW_ORIGINS_DEFAULT_VALUE);
127 } else {
128 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_ORIGINS);
129 }
130
131 let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS).is_ok();
132 if !is_var_set {
133 env::set_var(Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS, Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS_DEFAULT_VALUE);
134 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS, Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS_DEFAULT_VALUE);
135 } else {
136 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_CREDENTIALS);
137 }
138
139 let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_HEADERS).is_ok();
140 if !is_var_set {
141 env::set_var(Config::RWS_CONFIG_CORS_ALLOW_HEADERS, Config::RWS_CONFIG_CORS_ALLOW_HEADERS_DEFAULT_VALUE);
142 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_HEADERS, Config::RWS_CONFIG_CORS_ALLOW_HEADERS_DEFAULT_VALUE);
143 } else {
144 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_HEADERS);
145 }
146
147
148 let is_var_set = env::var(Config::RWS_CONFIG_CORS_ALLOW_METHODS).is_ok();
149 if !is_var_set {
150 env::set_var(Config::RWS_CONFIG_CORS_ALLOW_METHODS, Config::RWS_CONFIG_CORS_ALLOW_METHODS_DEFAULT_VALUE);
151 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_CORS_ALLOW_METHODS, Config::RWS_CONFIG_CORS_ALLOW_METHODS_DEFAULT_VALUE);
152 } else {
153 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_CORS_ALLOW_METHODS);
154 }
155
156 let is_var_set = env::var(Config::RWS_CONFIG_CORS_EXPOSE_HEADERS).is_ok();
157 if !is_var_set {
158 env::set_var(Config::RWS_CONFIG_CORS_EXPOSE_HEADERS, Config::RWS_CONFIG_CORS_EXPOSE_HEADERS_DEFAULT_VALUE);
159 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_CORS_EXPOSE_HEADERS, Config::RWS_CONFIG_CORS_EXPOSE_HEADERS_DEFAULT_VALUE);
160 } else {
161 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_CORS_EXPOSE_HEADERS);
162 }
163
164 let is_var_set = env::var(Config::RWS_CONFIG_CORS_MAX_AGE).is_ok();
165 if !is_var_set {
166 env::set_var(Config::RWS_CONFIG_CORS_MAX_AGE, Config::RWS_CONFIG_CORS_MAX_AGE_DEFAULT_VALUE);
167 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_CORS_MAX_AGE, Config::RWS_CONFIG_CORS_MAX_AGE_DEFAULT_VALUE);
168 } else {
169 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_CORS_MAX_AGE);
170 }
171
172
173 let is_var_set = env::var(Config::RWS_CONFIG_TLS_CERT_FILE).is_ok();
174 if !is_var_set {
175 env::set_var(Config::RWS_CONFIG_TLS_CERT_FILE, Config::RWS_CONFIG_TLS_CERT_FILE_DEFAULT_VALUE);
176 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_TLS_CERT_FILE, Config::RWS_CONFIG_TLS_CERT_FILE_DEFAULT_VALUE);
177 } else {
178 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_TLS_CERT_FILE);
179 }
180
181 let is_var_set = env::var(Config::RWS_CONFIG_TLS_KEY_FILE).is_ok();
182 if !is_var_set {
183 env::set_var(Config::RWS_CONFIG_TLS_KEY_FILE, Config::RWS_CONFIG_TLS_KEY_FILE_DEFAULT_VALUE);
184 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_TLS_KEY_FILE, Config::RWS_CONFIG_TLS_KEY_FILE_DEFAULT_VALUE);
185 } else {
186 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_TLS_KEY_FILE);
187 }
188
189 let is_var_set = env::var(Config::RWS_CONFIG_HTTP_REDIRECT_PORT).is_ok();
190 if !is_var_set {
191 env::set_var(Config::RWS_CONFIG_HTTP_REDIRECT_PORT, Config::RWS_CONFIG_HTTP_REDIRECT_PORT_DEFAULT_VALUE);
192 println!(" Default value for '{}' is '{}'", Config::RWS_CONFIG_HTTP_REDIRECT_PORT, Config::RWS_CONFIG_HTTP_REDIRECT_PORT_DEFAULT_VALUE);
193 } else {
194 println!(" There is an environment variable for '{}', default value won't be set", Config::RWS_CONFIG_HTTP_REDIRECT_PORT);
195 }
196
197 println!(" End of initializing default values\n");
198}
199
200
201pub fn get_ip_port_thread_count() -> (String, i32, i32) {
202 let mut ip : String = Config::RWS_CONFIG_IP_DEFAULT_VALUE.to_string();
203 let mut port: i32 = *Config::RWS_DEFAULT_PORT;
204 let mut thread_count: i32 = *Config::RWS_DEFAULT_THREAD_COUNT;
205
206 let boxed_ip = env::var(Config::RWS_CONFIG_IP);
207 if boxed_ip.is_ok() {
208 ip = boxed_ip.unwrap()
209 }
210
211 let boxed_port = env::var(Config::RWS_CONFIG_PORT);
212 if boxed_port.is_ok() {
213 let _port = boxed_port.unwrap();
214 let boxed_parse = _port.parse::<i32>();
215 if boxed_parse.is_ok() {
216 port = boxed_parse.unwrap();
217 } else {
218 eprintln!("unable to parse port value, expected number, got {}, variable: {}",
219 _port, Config::RWS_CONFIG_PORT);
220 }
221 } else {
222 eprintln!("unable to parse port value, variable: {}", Config::RWS_CONFIG_PORT);
223 }
224
225 let boxed_thread_count = env::var(Config::RWS_CONFIG_THREAD_COUNT);
226 if boxed_thread_count.is_ok() {
227 let _thread_count = boxed_thread_count.unwrap();
228 let boxed_parse = _thread_count.parse();
229 if boxed_parse.is_ok() {
230 thread_count = boxed_parse.unwrap()
231 } else {
232 eprintln!("unable to parse thread count value, expected number, got {}, variable: {}",
233 thread_count, Config::RWS_CONFIG_THREAD_COUNT);
234 }
235
236 } else {
237 eprintln!("unable to parse thread count value, variable: {}", Config::RWS_CONFIG_THREAD_COUNT);
238 }
239
240 (ip, port, thread_count)
241}
242
243pub fn get_request_allocation_size() -> i64 {
244 let mut request_allocation_size: i64 = *Config::RWS_DEFAULT_REQUEST_ALLOCATION_SIZE_IN_BYTES;
245
246 let boxed_port = env::var(Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
247 if boxed_port.is_ok() {
248 let _request_allocation_size = boxed_port.unwrap();
249 let boxed_parse = _request_allocation_size.parse::<i64>();
250 if boxed_parse.is_ok() {
251 request_allocation_size = boxed_parse.unwrap();
252 } else {
253 eprintln!("unable to parse port value, expected number, got {}, variable: {}",
254 _request_allocation_size, Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
255 }
256 } else {
257 eprintln!("unable to parse request allocation size value, variable: {}", Config::RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES);
258 }
259
260
261 request_allocation_size
262}
263