ockam_core/env/
env.rs

1use crate::env::FromString;
2use crate::errcode::{Kind, Origin};
3use crate::{Error, Result};
4use std::env;
5use std::env::VarError;
6
7/// Get environmental value `var_name`. If value is not found returns Ok(None)
8pub fn get_env<T: FromString>(var_name: &str) -> Result<Option<T>> {
9    match env::var(var_name) {
10        Ok(val) => {
11            match T::from_string(&val) {
12                Ok(v) => Ok(Some(v)),
13                Err(e) => Err(error(format!("The environment variable `{var_name}` cannot be decoded. The value `{val}` is invalid: {e:?}"))),
14            }
15        },
16        Err(e) => match e {
17            VarError::NotPresent => Ok(None),
18            VarError::NotUnicode(_) => Err(error(format!("The environment variable `{var_name}` cannot be decoded because it is not some valid Unicode"))),
19        },
20    }
21}
22
23/// Get environmental value `var_name`. If value is not found returns None
24pub fn get_env_ignore_error<T: FromString>(var_name: &str) -> Option<T> {
25    get_env::<T>(var_name).ok().flatten()
26}
27
28/// Return true if `var_name` is set and has a valid value
29pub fn is_set<T: FromString>(var_name: &str) -> Result<bool> {
30    Ok(get_env::<T>(var_name)?.is_some())
31}
32
33/// Get environmental value `var_name`. If value is not found returns `default_value`
34pub fn get_env_with_default<T: FromString>(var_name: &str, default_value: T) -> Result<T> {
35    Ok(get_env::<T>(var_name)?.unwrap_or(default_value))
36}
37
38/// Get environmental value `var_name`. If value is not found returns `default_value`
39pub fn get_env_with_default_ignore_error<T: FromString>(var_name: &str, default_value: T) -> T {
40    get_env::<T>(var_name)
41        .ok()
42        .flatten()
43        .unwrap_or(default_value)
44}
45
46pub(crate) fn error(msg: String) -> Error {
47    Error::new(Origin::Core, Kind::Invalid, msg)
48}