1use std::str::FromStr;
2
3pub fn parse_var<T: FromStr>(name: &str) -> T {
4 get_var(name)
5 .parse::<T>()
6 .unwrap_or_else(|_| panic!("Could not parse {name} as {}!", std::any::type_name::<T>()))
7}
8
9pub fn parse_var_or<T: FromStr>(name: &str, value: T) -> T {
10 parse_var_or_else(name, || value)
11}
12
13pub fn parse_var_or_else<T: FromStr>(name: &str, default: impl FnOnce() -> T) -> T {
14 if let Ok(data) = std::env::var(name) {
15 data.parse::<T>()
16 .unwrap_or_else(|_| panic!("Could not parse {name} as {}!", std::any::type_name::<T>()))
17 } else {
18 default()
19 }
20}
21
22pub fn get_var(name: &str) -> String {
23 std::env::var(name).unwrap_or_else(|_| panic!("Expected {name} in the environment!"))
24}