twitter_internal_api/utils/
env.rs1use anyhow::anyhow;
2use std::fmt::{Debug, Display};
3use std::str::FromStr;
4use std::{env, fs};
5
6#[tracing::instrument(name = "get_envar", skip_all, err)]
7pub fn get_envar<T: FromStr + Debug>(name: &str) -> anyhow::Result<T>
8where
9 <T as FromStr>::Err: Display,
10{
11 let var = env::var(name).map_err(|e| {
12 tracing::error!("Didn't find envar name: {}", name);
13 anyhow!("get_envvar error: {}", e)
14 })?;
15
16 let value = var.parse::<T>().map_err(|e| {
17 tracing::error!(
18 "Couldn't parse variable '{}' with value: '{:?}' and error: '{}'",
19 name,
20 var,
21 e
22 );
23 anyhow!("get_envvar error: {}", e)
24 })?;
25 Ok(value)
26}
27
28#[tracing::instrument(name = "load_dotenv", skip_all)]
29pub fn load_dotenv() {
30 let dotenv_file = format!(
31 ".env.{}",
32 env::var("APP_ENVIRONMENT").unwrap_or("local".into())
33 );
34 if fs::exists(&dotenv_file).unwrap_or_default() {
35 tracing::info!("Loading {}", dotenv_file);
36 dotenv::from_filename(&dotenv_file).ok();
37 return;
38 }
39 if fs::exists(".env").unwrap_or_default() {
40 tracing::info!("Loading .env");
41 dotenv::from_filename(".env").ok();
42 }
43}