use std::env;
use std::fmt::Debug;
use std::str::FromStr;
use tracing::error;
pub fn get_env_or_default<T: FromStr>(env_var: &str, default: T) -> T
where
<T as FromStr>::Err: Debug,
{
match env::var(env_var) {
Ok(val) => val.parse::<T>().unwrap_or_else(|_| {
error!("Failed to parse {}: {}, using default", env_var, val);
default
}),
Err(_) => default,
}
}
pub fn get_env_optional<T: FromStr>(env_var: &str) -> Option<T>
where
<T as FromStr>::Err: Debug,
{
match env::var(env_var) {
Ok(val) => val.parse::<T>().ok(),
Err(_) => None,
}
}
pub fn gen_id() -> String {
let alphabet: [char; 36] = [
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
];
nanoid::nanoid!(30, &alphabet)
}