use serde::Deserialize; use tracing::error; use crate::errors::ServiceError; use std::fs; use std::str; #[derive(Deserialize)] pub struct Config { pub server: ServerConfig, pub database: DbConfig, } #[derive(Deserialize)] pub struct ServerConfig { pub bind_addr: String, pub admin_email: String } #[derive(Deserialize, Clone)] pub struct DbConfig { pub postgres_url: String, pub max_connections: u32, } impl Config { pub fn init(path: String) -> Result { if let Ok(c) = fs::read(path) { if c.len() == 0 { error!("Config file empty."); return Err(ServiceError::MissingConfig); } else { let config: Config = toml::from_str(str::from_utf8(&c).unwrap())?; return Ok(config); } } else { error!("Unable to read from config file."); return Err(ServiceError::MissingConfig); } } }