random_image_server/
env.rs

1use std::env::VarError;
2
3pub trait EnvBackend {
4    /// Read an environment variable
5    ///
6    /// # Errors
7    ///
8    /// Returns an error if the variable is not set
9    fn var(&self, var: &str) -> Result<String, VarError>;
10
11    /// Set an environment variable
12    fn set_var(&mut self, var: &str, value: &str);
13
14    /// Remove an environment variable
15    fn remove(&mut self, var: &str);
16}
17
18pub(crate) struct StdEnvBackend;
19impl EnvBackend for StdEnvBackend {
20    fn var(&self, var: &str) -> Result<String, VarError> {
21        std::env::var(var)
22    }
23
24    fn set_var(&mut self, var: &str, value: &str) {
25        unsafe { std::env::set_var(var, value) };
26    }
27
28    fn remove(&mut self, var: &str) {
29        unsafe { std::env::remove_var(var) };
30    }
31}
32
33#[derive(Default)]
34pub struct MockEnvBackend {
35    vars: std::collections::HashMap<String, String>,
36}
37
38impl EnvBackend for MockEnvBackend {
39    fn var(&self, var: &str) -> Result<String, VarError> {
40        self.vars.get(var).cloned().ok_or(VarError::NotPresent)
41    }
42
43    fn set_var(&mut self, var: &str, value: &str) {
44        self.vars.insert(var.to_string(), value.to_string());
45    }
46
47    fn remove(&mut self, var: &str) {
48        self.vars.remove(var);
49    }
50}