ig_client/utils/config.rs
1/******************************************************************************
2 Author: Joaquín Béjar García
3 Email: jb@taunais.com
4 Date: 20/10/25
5******************************************************************************/
6use std::env;
7use std::fmt::Debug;
8use std::str::FromStr;
9use tracing::error;
10
11/// Gets an environment variable or returns a default value if not found or cannot be parsed
12///
13/// # Arguments
14///
15/// * `env_var` - The name of the environment variable
16/// * `default` - The default value to use if the environment variable is not found or cannot be parsed
17///
18/// # Returns
19///
20/// The parsed value of the environment variable or the default value
21#[must_use]
22#[inline]
23pub fn get_env_or_default<T: FromStr>(env_var: &str, default: T) -> T
24where
25 <T as FromStr>::Err: Debug,
26{
27 match env::var(env_var) {
28 Ok(val) => val.parse::<T>().unwrap_or_else(|_| {
29 error!("Failed to parse {}: {}, using default", env_var, val);
30 default
31 }),
32 Err(_) => default,
33 }
34}
35
36/// Gets an environment variable and parses it, returning None if not found or invalid
37///
38/// # Arguments
39/// * `env_var` - Name of the environment variable
40///
41/// # Returns
42/// Parsed value if found and valid, None otherwise
43#[must_use]
44#[inline]
45pub fn get_env_or_none<T: FromStr>(env_var: &str) -> Option<T>
46where
47 <T as FromStr>::Err: Debug,
48{
49 match env::var(env_var) {
50 Ok(val) => val.parse::<T>().ok(),
51 Err(_) => None,
52 }
53}