From ad2b08f22b05f4c660e382574f5e69611b0d3612 Mon Sep 17 00:00:00 2001 From: eraden Date: Sun, 1 May 2022 17:27:56 +0200 Subject: [PATCH] Set opts as most important in config --- api/src/config.rs | 14 ++++++++++++-- api/src/main.rs | 13 ++++--------- api/src/opts.rs | 13 ++++--------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/api/src/config.rs b/api/src/config.rs index 22bf62c..dab03e5 100644 --- a/api/src/config.rs +++ b/api/src/config.rs @@ -4,6 +4,8 @@ use parking_lot::Mutex; use password_hash::SaltString; use serde::{Deserialize, Serialize}; +use crate::UpdateConfig; + trait Example: Sized { fn example() -> Self; } @@ -321,9 +323,17 @@ impl Default for AppConfig { } } -pub fn load(config_path: &str) -> SharedAppConfig { +pub fn default_load(opts: &impl UpdateConfig) -> SharedAppConfig { + load("./bazzar.toml", opts) +} + +fn load(config_path: &str, opts: &impl UpdateConfig) -> SharedAppConfig { match std::fs::read_to_string(config_path) { - Ok(c) => SharedAppConfig::new(toml::from_str(&c).unwrap()), + Ok(c) => { + let mut c = toml::from_str(&c).unwrap(); + opts.update_config(&mut c); + SharedAppConfig::new(c) + } Err(e) if e.kind() == std::io::ErrorKind::NotFound => { let config = AppConfig::example(); std::fs::write(config_path, toml::to_string_pretty(&config).unwrap()).unwrap(); diff --git a/api/src/main.rs b/api/src/main.rs index c3288c0..4b306b9 100644 --- a/api/src/main.rs +++ b/api/src/main.rs @@ -53,10 +53,7 @@ async fn server(opts: ServerOpts) -> Result<()> { }; let redis_connection_string = "127.0.0.1:6379"; - let app_config = config::load("./bazzar.toml"); - { - opts.update_config(&mut *app_config.lock()); - } + let app_config = config::default_load(&opts); let db = database::Database::build(app_config.clone()).await?.start(); let token_manager = token_manager::TokenManager::new(app_config.clone(), db.clone()).start(); @@ -98,8 +95,7 @@ async fn server(opts: ServerOpts) -> Result<()> { async fn migrate(opts: MigrateOpts) -> Result<()> { use sqlx::migrate::MigrateError; - let config = config::load("./bazzar.toml"); - opts.update_config(&mut *config.lock()); + let config = config::default_load(&opts); let db = database::Database::build(config).await?; let res: std::result::Result<(), MigrateError> = sqlx::migrate!("../db/migrate").run(db.pool()).await; @@ -130,8 +126,7 @@ async fn create_account(opts: CreateAccountOpts) -> Result<()> { if !validate_length(&opts.login, Some(4), Some(100), None) { panic!("Login must have at least 4 characters and no more than 100"); } - let config = config::load("./bazzar.toml"); - opts.update_config(&mut *config.lock()); + let config = config::default_load(&opts); let db = database::Database::build(config.clone()).await?.start(); let pass = match opts.pass_file { Some(path) => std::fs::read_to_string(path).map_err(Error::PassFile)?, @@ -172,7 +167,7 @@ async fn create_account(opts: CreateAccountOpts) -> Result<()> { } async fn test_mailer(opts: TestMailerOpts) -> Result<()> { - let config = config::load("./bazzar.toml"); + let config = config::default_load(&opts); opts.update_config(&mut *config.lock()); let manager = email_manager::EmailManager::build(config) diff --git a/api/src/opts.rs b/api/src/opts.rs index 8df4390..6f52b8e 100644 --- a/api/src/opts.rs +++ b/api/src/opts.rs @@ -109,12 +109,8 @@ impl UpdateConfig for ServerOpts { fn update_config(&self, config: &mut AppConfig) { { let web = config.web_mut(); - if web.bind().is_none() { - web.set_bind(&self.bind); - } - if web.port().is_none() { - web.set_port(self.port); - } + web.set_bind(&self.bind); + web.set_port(self.port); } if let Some(url) = self.db_url.as_ref() { config.database_mut().set_url(url); @@ -168,9 +164,8 @@ pub struct CreateAccountOpts { impl UpdateConfig for CreateAccountOpts { fn update_config(&self, config: &mut AppConfig) { - match &self.cmd { - None => {} - Some(opts) => opts.update_config(config), + if let Some(opts) = &self.cmd { + opts.update_config(config) }; } }