turbopack_bench/util/
env.rs1use std::{error::Error, str::FromStr};
2
3use anyhow::{Context, Result, anyhow};
4
5pub 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
20pub 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
30pub 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}