rsiot

Module env_vars

Source
Expand description

Загрузка переменных среды из ОС и из файла .env

Ссылки:

§Команды

§Cоздать / обновить файл .env.example

cargo run --bin env_vars create

Создает файл .env.example со значениями по-умолчанию

§Проверить файл .env

cargo run --bin env_vars check
  1. Пытается загрузить файл .env
  2. Читает настройки в структуру src/config.rs

§Пример

#[cfg(feature = "env_vars")]
#[tokio::main]
async fn main() {
    use serde::{Deserialize, Serialize};
    use url::Url;

    /// Структура со всеми переменными
    #[derive(Clone, Debug, Deserialize, Serialize)]
    pub struct Config {
        pub db_host: String,
        pub db_port: u16,
        pub db_user: String,
        pub db_password: String,
    }

    /// Задаем настройки по-умолчанию
    impl Default for Config {
        fn default() -> Self {
            Self {
                db_host: "localhost".into(),
                db_port: 5432,
                db_user: "postgres".into(),
                db_password: "postgres".into(),
            }
        }
    }

    /// Добавляем переменные, которые собираются из заданных в файле
    impl Config {
        /// Подключение к БД с данными
        #[allow(dead_code)]
        pub fn db_data_url(&self) -> Url {
            let url = format!(
                "postgres://{}:{}@{}:{}/db_data",
                self.db_user, self.db_password, self.db_host, self.db_port
            );
            Url::parse(&url).expect("Неправильно заданный адрес БД")
        }
    }

    impl IEnvVars for Config {}

    use rsiot::env_vars::{load_config, IEnvVars};

    tracing_subscriber::fmt().init();
    let config = load_config::<Config>();
    println!("{:#?}", config);
}

#[cfg(not(feature = "env_vars"))]
fn main() {}

Enums§

  • Ошибки модуля работы с переменными среды

Traits§

  • Трейт, который должна реализовывать структура конфигурации

Functions§