turbopack_bench/util/
env.rs

1use std::{error::Error, str::FromStr};
2
3use anyhow::{Context, Result, anyhow};
4
5/// Reads an environment variable.
6pub fn read_env<T>(name: &str, default: T) -> Result<T>
7where
8    T: FromStr,
9    <T as FromStr>::Err: Error + Send + Sync + 'static,
10{
11    let config = std::env::var(name).ok();
12    match config.as_deref() {
13        None | Some("") => Ok(default),
14        Some(config) => config
15            .parse()
16            .with_context(|| anyhow!("Invalid value for {}", name)),
17    }
18}
19
20/// Reads a boolean-like environment variable, where any value but "0", "no",
21/// or "false" is considered true.
22pub fn read_env_bool(name: &str) -> bool {
23    let config = std::env::var(name).ok();
24    !matches!(
25        config.as_deref(),
26        None | Some("") | Some("0") | Some("no") | Some("false")
27    )
28}
29
30/// Reads a comma-separated environment variable as a vector.
31pub fn read_env_list<T>(name: &str, default: Vec<T>) -> Result<Vec<T>>
32where
33    T: FromStr,
34    <T as FromStr>::Err: Error + Send + Sync + 'static,
35{
36    let config = std::env::var(name).ok();
37    match config.as_deref() {
38        None | Some("") => Ok(default),
39        Some(config) => config
40            .split(',')
41            .map(|s| {
42                s.parse()
43                    .with_context(|| anyhow!("Invalid value for {}", name))
44            })
45            .collect(),
46    }
47}