use std::env;
-use config::{Config, ConfigError, Environment, File};
+use config::{Config, ConfigError, Environment, File, Source};
use log::info;
-use serde::{Deserialize};
-
+use serde::Deserialize;
#[derive(Debug, Deserialize, Clone)]
#[serde(bound(deserialize = "T: Deserialize<'de> + std::default::Default + Clone"))]
pub nats: crate::nats::NatsConfiguration,
}
-impl<T> Settings<T> where T: Deserialize<'static> + std::default::Default + Clone {
+impl<T> Settings<T>
+where
+ T: Deserialize<'static> + std::default::Default + Clone,
+{
pub fn new(service_name: &str) -> Result<Settings<T>, ConfigError> {
let mut default = Config::default();
// this file my be shared with all the components
default.merge(File::with_name(&format!("config/{}", mode)).required(false))?;
default.merge(File::with_name("config/local").required(false))?;
+ let env = Environment::with_prefix("NOVA").separator("__");
+ println!("{:?}", env.collect());
// we can configure each component using environment variables
- default.merge(Environment::with_prefix("NOVA").separator("_"))?;
+ default.merge(env)?;
let mut config: Settings<T> = default.clone().try_into().unwrap();
// try to load the config
use std::{net::ToSocketAddrs, sync::Arc};\r
-mod handler;\r
mod config;\r
+mod handler;\r
use crate::handler::make_service::MakeSvc;\r
\r
-use hyper::Server;\r
-use log::{info, error};\r
-use common::config::Settings;\r
use crate::config::Config;\r
+use common::config::Settings;\r
+use hyper::Server;\r
+use log::{error, info};\r
\r
#[tokio::main]\r
async fn main() {\r
let settings: Settings<Config> = Settings::new("webhook").unwrap();\r
+ println!("{:?}", settings);\r
\r
- let addr = format!("{}:{}", settings.config.server.address, settings.config.server.port)\r
- .to_socket_addrs()\r
- .unwrap()\r
- .next()\r
- .unwrap();\r
+ let addr = format!(\r
+ "{}:{}",\r
+ settings.config.server.address, settings.config.server.port\r
+ )\r
+ .to_socket_addrs()\r
+ .unwrap()\r
+ .next()\r
+ .unwrap();\r
\r
info!(\r
"Starting server on {}:{}",\r