36 lines
886 B
Rust
36 lines
886 B
Rust
use config::{Config, Environment, File};
|
|
use serde::Deserialize;
|
|
|
|
#[derive(Debug, Deserialize, Clone)]
|
|
pub struct Settings {
|
|
pub server: ServerSettings,
|
|
pub app: AppSettings,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, Clone)]
|
|
pub struct AppSettings {
|
|
pub heartbeat_interval_secs: u64,
|
|
pub metrics_interval_secs: u64,
|
|
pub port: u16,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, Clone)]
|
|
|
|
pub struct ServerSettings {
|
|
pub url: String,
|
|
}
|
|
|
|
impl Settings {
|
|
pub fn new() -> Result<Self, config::ConfigError> {
|
|
// Load .env file first
|
|
dotenvy::dotenv().ok();
|
|
|
|
// Merge settings from multiple sources
|
|
let builder = config::Config::builder()
|
|
.add_source(config::File::with_name("Settings").required(false)) // Settings.toml optional
|
|
.add_source(Environment::default().separator("_"));
|
|
|
|
builder.build()?.try_deserialize()
|
|
}
|
|
}
|