1use config::{Config, ConfigError, Environment};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug)]
5pub struct ServerConfiguration {
6 pub port: u16,
7 pub log_level: String,
8 pub config_file: String,
9 pub enable_echo: bool,
10}
11
12impl ServerConfiguration {
13 pub fn build() -> Result<Self, ConfigError> {
14 Config::builder()
15 .add_source(Environment::with_prefix("PIXY"))
16 .set_default("port", 9147)?
17 .set_default("log_level", "info")?
18 .set_default("config_file", "/pixy.yaml")?
19 .set_default("enable_echo", false)?
20 .build()?
21 .try_deserialize()
22 }
23}