Rustで設定ファイルの内容をグローバル変数に保存する
設定ファイル .env
を読み込んでグローバルな変数に保持する。
.env
ADDRESS=localhost
PORT=6379
環境
- Ubuntu 20.04
- Rust 1.46.0
使用するcrate
[dependencies]
#.envファイルの内容を環境変数として読み込む
dotenv = "0.15.0"
# .envの内容をConfigに保存するcrate
config = "0.10.1"
# 実行時にstatic変数を初期化するcrate
lazy_static = "1.4.0"
serde = {version = "1.0.116", features = ["derive"]}
コード
extern crate lazy_static;
use config::ConfigError;
use dotenv::dotenv;
use lazy_static::lazy_static;
use serde::Deserialize;
/// .envの内容を保存するstruct
#[derive(Deserialize, Debug)]
pub struct Config {
pub address: String,
pub port: i32,
}
impl Config {
/// 環境変数からデータを読み込む
pub fn from_env() -> Result<Self, ConfigError> {
let mut cfg = config::Config::new();
cfg.merge(config::Environment::new())?;
cfg.try_into()
}
}
/// static変数の初期化
lazy_static! {
static ref CONFIG: Config = {
dotenv().ok();
Config::from_env().unwrap()
};
}
fn main() {
println!("address: {}", CONFIG.address);
println!("port: {}", CONFIG.port);
}