moved config settings to separate module.
This commit is contained in:
50
src/settings.rs
Normal file
50
src/settings.rs
Normal file
@@ -0,0 +1,50 @@
|
||||
use config::{Config, ConfigError};
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
//#[allow(unused)]
|
||||
pub struct Settings {
|
||||
pub address: String,
|
||||
pub port: u16,
|
||||
}
|
||||
|
||||
impl Settings {
|
||||
pub fn new() -> Result<Self, ConfigError> {
|
||||
let s = Config::builder()
|
||||
.set_default("port", 9090)?
|
||||
.set_default("address", "127.0.0.1")?
|
||||
.add_source(
|
||||
config::Environment::with_prefix("MTT")
|
||||
.try_parsing(true)
|
||||
.separator("_")
|
||||
.list_separator(" "),
|
||||
)
|
||||
.build()?;
|
||||
s.try_deserialize()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod settings_tests {
|
||||
use super::*;
|
||||
use serial_test::serial;
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn defaults() {
|
||||
let set = Settings::new().unwrap();
|
||||
println!("{:?}", set);
|
||||
assert_eq!(set.port, 9090);
|
||||
assert_eq!(set.address, "127.0.0.1");
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn port_env() {
|
||||
std::env::set_var("MTT_PORT", "7825");
|
||||
let set = Settings::new().unwrap();
|
||||
println!("{:?}", set);
|
||||
assert_eq!(set.port, 7825);
|
||||
std::env::remove_var("MTT_PORT");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user