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