1use std::env::{self, VarError};
2use thiserror::Error;
3
4pub fn get(key: &str) -> Result<String, VarError> {
6 env::var(key)
7}
8
9pub fn set(key: &str, value: &str) {
11 env::set_var(key, value)
12}
13
14pub fn get_or_default(key: &str, default: &str) -> String {
16 get(key).unwrap_or_else(|_| String::from(default))
17}
18
19pub fn get_multiple(keys: &[&str]) -> Vec<String> {
22 let mut results = vec![];
23 for key in keys {
24 match env::var(key) {
25 Ok(value) => {
26 results.push(value);
27 }
28 Err(e) => panic!("Error at key {key}, {e}"),
29 };
30 }
31 results
32}
33
34pub fn get_or_default_multiple(keys: &[(&str, &str)]) -> Vec<String> {
37 let mut results = vec![];
38 for (key, default) in keys {
39 match env::var(key) {
40 Ok(value) => {
41 results.push(value);
42 }
43 Err(_) => results.push(default.to_string()),
44 };
45 }
46 results
47}
48
49pub fn load_from_file(path: &str) -> Result<(), ConfigError> {
51 dotenv::from_path(path).map_err(ConfigError::DotEnv)
52}
53
54#[derive(Debug, Error)]
55pub enum ConfigError {
56 #[error("IO Error: {0}")]
57 Io(#[from] std::io::Error),
58 #[error("Error while loading .env: {0}")]
59 DotEnv(#[from] dotenv::Error),
60}