Set opts as most important in config
This commit is contained in:
parent
79b67a93a3
commit
ad2b08f22b
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -109,13 +109,9 @@ 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);
|
||||
}
|
||||
}
|
||||
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)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user