1pub mod parse_env {
5 use hyper::Uri;
6 use std::{env, str::FromStr, time::Duration};
7
8 use crate::parse_uri;
9
10 pub fn duration(name: &str) -> Option<Duration> {
11 Some(Duration::from_secs_f32(
12 env::var(name).ok()?.parse::<f32>().ok()?,
13 ))
14 }
15
16 pub fn int<T: FromStr>(name: &str) -> Option<T> {
17 env::var(name).ok()?.parse::<T>().ok()
18 }
19
20 pub fn bool(name: &str) -> Option<bool> {
21 let var = env::var(name).ok()?;
22 Some(var == "true" || var == "1")
23 }
24
25 pub fn str_not_empty(name: &str) -> Option<String> {
26 env::var(name).ok().filter(|s| !s.is_empty())
27 }
28
29 pub fn uri(name: &str) -> Option<Uri> {
30 parse_uri(&str_not_empty(name)?).ok()
31 }
32}