From 56496bf97ba7576bd7ad6debaa7b55aca18bfb9a Mon Sep 17 00:00:00 2001 From: _ <> Date: Mon, 15 Mar 2021 19:55:12 +0000 Subject: [PATCH] add `--name` so caller program can provide name --- crates/ptth_server/src/bin/ptth_server.rs | 36 ++++++++++++++++++----- crates/ptth_server/src/lib.rs | 7 +++-- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/crates/ptth_server/src/bin/ptth_server.rs b/crates/ptth_server/src/bin/ptth_server.rs index 9a05277..a6109da 100644 --- a/crates/ptth_server/src/bin/ptth_server.rs +++ b/crates/ptth_server/src/bin/ptth_server.rs @@ -8,7 +8,6 @@ use structopt::StructOpt; use tokio::runtime; use ptth_server::{ - ConfigFile, load_toml, run_server, }; @@ -18,23 +17,46 @@ struct Opt { //#[structopt (long)] //file_server_root: Option , - #[structopt (long)] - config_path: Option , - #[structopt (long)] asset_root: Option , + #[structopt (long)] + config_path: Option , + + #[structopt (long)] + name: Option , + #[structopt (long)] print_tripcode: bool, + + #[structopt (long)] + relay_url: Option , +} + +#[derive (Default, serde::Deserialize)] +pub struct ConfigFile { + pub name: Option , + pub api_key: String, + pub relay_url: Option , + pub file_server_root: Option , } fn main () -> Result <(), anyhow::Error> { - let opt = Opt::from_args (); - tracing_subscriber::fmt::init (); + + let opt = Opt::from_args (); + let asset_root = opt.asset_root; + let path = opt.config_path.clone ().unwrap_or_else (|| PathBuf::from ("./config/ptth_server.toml")); let config_file: ConfigFile = load_toml::load (&path)?; + let config_file = ptth_server::ConfigFile { + name: opt.name.or (config_file.name).expect ("`name` must be provided in command line or config file"), + api_key: config_file.api_key, + relay_url: opt.relay_url.or (config_file.relay_url).expect ("`relay_url` must be provided in command line of config file"), + file_server_root: config_file.file_server_root, + }; + if opt.print_tripcode { println! (r#"name = "{}""#, config_file.name); println! (r#"tripcode = "{}""#, config_file.tripcode ()); @@ -48,7 +70,7 @@ fn main () -> Result <(), anyhow::Error> { config_file, ptth_core::graceful_shutdown::init (), Some (path), - opt.asset_root + asset_root ).await })?; diff --git a/crates/ptth_server/src/lib.rs b/crates/ptth_server/src/lib.rs index 091c7d4..0c6efc1 100644 --- a/crates/ptth_server/src/lib.rs +++ b/crates/ptth_server/src/lib.rs @@ -15,7 +15,6 @@ use std::{ use futures::FutureExt; use reqwest::Client; -use serde::Deserialize; use tokio::{ sync::{ oneshot, @@ -146,7 +145,11 @@ async fn handle_req_resp ( Ok (()) } -#[derive (Default, Deserialize)] +// A complete config file. The bin frontend is allowed to use a different +// type to load an incomplete file, as long as the command line options +// complete it. + +#[derive (Default)] pub struct ConfigFile { pub name: String, pub api_key: String,