31 lines
770 B
Rust
31 lines
770 B
Rust
use anyhow::Result;
|
|
use config::{Config, Environment, File};
|
|
use serde::Deserialize;
|
|
use std::{env, net::SocketAddr};
|
|
|
|
#[derive(Debug, Deserialize, Clone)]
|
|
pub struct Database {
|
|
pub url: String,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, Clone)]
|
|
#[allow(unused)]
|
|
pub struct Conf {
|
|
pub debug: bool,
|
|
pub database: Database,
|
|
pub listen: SocketAddr,
|
|
}
|
|
|
|
impl Conf {
|
|
pub fn read() -> Result<Self> {
|
|
let mode = env::var("MODE").unwrap_or_else(|_| "dev".into());
|
|
|
|
let s = Config::builder()
|
|
.add_source(File::with_name("conf/default"))
|
|
.add_source(File::with_name(&format!("conf/{}", mode)).required(false))
|
|
.add_source(Environment::with_prefix("z2a"))
|
|
.build()?;
|
|
|
|
Ok(s.try_deserialize()?)
|
|
}
|
|
}
|