evobench_tools/utillib/
bool_env.rs

1use anyhow::{Result, bail};
2
3/// Get the boolean value from env variable `name`. If missing, if
4/// `default` is given, return that, otherwise return an
5/// error. Returns errors for invalid values (anything else than
6/// `0|1|f|t|n|y`).
7pub fn get_env_bool(name: &str, default: Option<bool>) -> Result<bool> {
8    match std::env::var("DEBUG_LINEAR") {
9        Ok(s) => match s.as_str() {
10            "1" | "t" | "y" => Ok(true),
11            "0" | "f" | "n" => Ok(false),
12            _ => bail!("invalid value for env variable {name:?}"),
13        },
14        Err(e) => match e {
15            std::env::VarError::NotPresent => {
16                if let Some(default) = default {
17                    Ok(default)
18                } else {
19                    bail!("env variable {name:?} is missing")
20                }
21            }
22            std::env::VarError::NotUnicode(_) => bail!("non-utf8 string in env var DEBUG_LINEAR"),
23        },
24    }
25}