pub use config::ConfigError; use deadpool_postgres::Pool; use serde::Deserialize; use slog::{o, Drain, Logger}; use slog_async; use slog_term; #[derive(Deserialize)] pub struct ServerConfig { pub host: String, pub port: u16, } #[derive(Deserialize)] pub struct Config { pub server: ServerConfig, pub pg: deadpool_postgres::Config, } impl Config { pub fn from_env() -> Result { let mut cfg = config::Config::new(); cfg.merge(config::Environment::new())?; cfg.try_into() } pub fn logging() -> Logger { let decorator = slog_term::TermDecorator::new().build(); let drain = slog_term::FullFormat::new(decorator).build().fuse(); let drain = slog_async::Async::new(drain).build().fuse(); slog::Logger::root(drain, o!()) } } #[derive(Clone)] pub struct AppState { pub pool: Pool, pub log: slog::Logger, }