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
21pub fn get_env_or_default<T: FromStr>(env_var: &str, default: T) -> T
22where
23    <T as FromStr>::Err: Debug,
24{
25    match env::var(env_var) {
26        Ok(val) => val.parse::<T>().unwrap_or_else(|_| {
27            error!("Failed to parse {}: {}, using default", env_var, val);
28            default
29        }),
30        Err(_) => default,
31    }
32}
33
34/// Gets an environment variable and parses it, returning None if not found or invalid
35///
36/// # Arguments
37/// * `env_var` - Name of the environment variable
38///
39/// # Returns
40/// Parsed value if found and valid, None otherwise
41pub fn get_env_or_none<T: FromStr>(env_var: &str) -> Option<T>
42where
43    <T as FromStr>::Err: Debug,
44{
45    match env::var(env_var) {
46        Ok(val) => val.parse::<T>().ok(),
47        Err(_) => None,
48    }
49}