rsiot/env_vars/
load_config.rs1use dotenvy::dotenv;
2use envy::from_env;
3
4use super::{Errors, IEnvVars};
5
6pub fn load_config<TEnvVars>() -> Result<TEnvVars, Errors>
14where
15 TEnvVars: IEnvVars,
16{
17 println!("Пробуем загрузить переменные из окружения");
18 let vars = load_from_env();
19 match vars {
20 Ok(vars) => {
21 println!("Переменные из окружения загружены");
22 return Ok(vars);
23 }
24 Err(err) => {
25 println!("Ошибка загрузки переменных из окружения: {err}");
26 }
27 }
28
29 println!("Пробуем загрузить переменные из файла .env");
30 let vars = load_from_file();
31 let err = match vars {
32 Ok(vars) => {
33 println!("Переменные из файла успешно загружены");
34 return Ok(vars);
35 }
36 Err(err) => {
37 println!("Ошибка загрузки переменных из файла .env: {err}");
38 err
39 }
40 };
41
42 let help = format!(
43 "\n\nПроверьте содержимое файла .env: \n{:?}",
44 TEnvVars::default()
45 );
46 println!("{}", help);
47
48 Err(err)
49}
50
51fn load_from_env<TEnvVars>() -> Result<TEnvVars, Errors>
53where
54 TEnvVars: IEnvVars,
55{
56 let vars = from_env::<TEnvVars>()?;
57 Ok(vars)
58}
59
60fn load_from_file<TEnvVars>() -> Result<TEnvVars, Errors>
62where
63 TEnvVars: IEnvVars,
64{
65 dotenv()?;
66 let vars = from_env::<TEnvVars>()?;
67 Ok(vars)
68}