twitter-internal-api 0.1.1

Twitter internal API
Documentation
use anyhow::anyhow;
use std::fmt::{Debug, Display};
use std::str::FromStr;
use std::{env, fs};

#[tracing::instrument(name = "get_envar", skip_all, err)]
pub fn get_envar<T: FromStr + Debug>(name: &str) -> anyhow::Result<T>
where
    <T as FromStr>::Err: Display,
{
    let var = env::var(name).map_err(|e| {
        tracing::error!("Didn't find envar name: {}", name);
        anyhow!("get_envvar error: {}", e)
    })?;

    let value = var.parse::<T>().map_err(|e| {
        tracing::error!(
            "Couldn't parse variable '{}' with value: '{:?}' and error: '{}'",
            name,
            var,
            e
        );
        anyhow!("get_envvar error: {}", e)
    })?;
    Ok(value)
}

#[tracing::instrument(name = "load_dotenv", skip_all)]
pub fn load_dotenv() {
    let dotenv_file = format!(
        ".env.{}",
        env::var("APP_ENVIRONMENT").unwrap_or("local".into())
    );
    if fs::exists(&dotenv_file).unwrap_or_default() {
        tracing::info!("Loading {}", dotenv_file);
        dotenv::from_filename(&dotenv_file).ok();
        return;
    }
    if fs::exists(".env").unwrap_or_default() {
        tracing::info!("Loading .env");
        dotenv::from_filename(".env").ok();
    }
}