Skip to main content

potenv/env/
mod.rs

1#[cfg(test)]
2mod tests;
3
4use std::collections::HashMap;
5
6/// Trait for environment variable providers.
7pub trait EnvProvider {
8    fn var(&self, name: &str) -> Option<String>;
9
10    fn set_var(&mut self, name: &str, value: &str);
11}
12
13/// An environment variable provider that reads from and writes to
14/// the current process environment.
15#[derive(Debug, Clone, Copy)]
16pub struct ProcessEnvProvider;
17
18impl EnvProvider for ProcessEnvProvider {
19    fn var(&self, name: &str) -> Option<String> {
20        std::env::var_os(name).map(|v| v.to_string_lossy().into())
21    }
22
23    fn set_var(&mut self, name: &str, value: &str) {
24        std::env::set_var(name, value)
25    }
26}
27
28impl EnvProvider for HashMap<String, String> {
29    fn var(&self, name: &str) -> Option<String> {
30        self.get(name).map(ToOwned::to_owned)
31    }
32
33    fn set_var(&mut self, name: &str, value: &str) {
34        self.insert(name.to_owned(), value.to_owned());
35    }
36}