1#[derive(Debug, Clone)]
3pub struct EnvSearcherError {
4 pub reason: String,
5}
6use std::fmt;
7impl fmt::Display for EnvSearcherError {
8 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
9 write!(f, "{}", self.reason)
10 }
11}
12
13use std::env;
14
15pub fn get_var(key: String) -> Result<String, EnvSearcherError> {
32 let real_env_var_res = env::var(&key);
33 if real_env_var_res.is_ok() {
34 return Ok(real_env_var_res.ok().unwrap());
35 }
36 let dotenv_res = dotenv::var(key);
37 if dotenv_res.is_ok() {
38 return Ok(dotenv_res.unwrap());
39 }
40 Err(EnvSearcherError{reason: "No such env var".to_string()})
41}
42
43#[cfg(test)]
44mod tests {
45 #[test]
46 fn string_test() {
47 let result = crate::get_var("GOOD_TEST_STRING".to_string());
48 assert_eq!(result.unwrap(), "hello_world");
49 }
50 #[test]
51 fn number_test() {
52 let result = crate::get_var("GOOD_TEST_NUMBER".to_string());
53 assert_eq!(result.unwrap(), "12345");
54 }
55}