diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-12-26 10:00:45 +0100 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-12-26 10:01:56 +0100 |
commit | a3111a5d214db66b7d676940b8f8bfda5074bd45 (patch) | |
tree | a68cc1458386052a7c97a07b69bd161866ad7046 /pkgs/by-name/ba/back/src/main.rs | |
parent | fix(hosts/server2): Use correct path to `vhack.eu/nixos-server` repo (diff) | |
download | nixos-server-a3111a5d214db66b7d676940b8f8bfda5074bd45.tar.gz nixos-server-a3111a5d214db66b7d676940b8f8bfda5074bd45.zip |
fix(pkgs/back): Use rocket to manage the configuration values
This reduces the amount of needed `unwraps`/`expects` and allows us to streamline the parsing processes.
Diffstat (limited to 'pkgs/by-name/ba/back/src/main.rs')
-rw-r--r-- | pkgs/by-name/ba/back/src/main.rs | 73 |
1 files changed, 21 insertions, 52 deletions
diff --git a/pkgs/by-name/ba/back/src/main.rs b/pkgs/by-name/ba/back/src/main.rs index 86fe196..e8f36d2 100644 --- a/pkgs/by-name/ba/back/src/main.rs +++ b/pkgs/by-name/ba/back/src/main.rs @@ -9,62 +9,31 @@ // You should have received a copy of the License along with this program. // If not, see <https://www.gnu.org/licenses/agpl.txt>. -use std::{env::args, path::PathBuf, process, sync::OnceLock}; +use clap::Parser; +use config::BackConfig; +use rocket::routes; -use gix::ThreadSafeRepository; -use rocket::{launch, routes}; -use url::Url; +use crate::web::{closed, open, show_issue, styles}; -use crate::issues::{closed, open, show_issue, styles}; +mod cli; +pub mod config; +mod error; +mod web; -mod issues; +#[rocket::main] +async fn main() -> Result<(), error::Error> { + let args = cli::Cli::parse(); -static REPOSITORY: OnceLock<ThreadSafeRepository> = OnceLock::new(); -static SOURCE_CODE_REPOSITORY: OnceLock<Url> = OnceLock::new(); + let config = BackConfig::from_config_file(&args.config_file)?; -#[launch] -fn rocket() -> _ { - let repository_path = { - let maybe_path = args().skip(1).rev().last(); - if let Some(path) = maybe_path { - PathBuf::from(path) - } else { - eprintln!("Usage: back <issue repoitory>"); - process::exit(1); - } - }; - let source_code_url = { - match std::env::var("BACK_SOURCE_CODE_REPOSITORY_URL") { - Ok(value) => match Url::parse(&value) { - Ok(url) => url, - Err(err) => { - eprintln!("Can't parse `BACK_SOURCE_CODE_REPOSITORY_URL` value as url: {err}"); - process::exit(1); - } - }, - Err(err) => { - eprintln!("back needs you to specify a source code repositiory as `BACK_SOURCE_CODE_REPOSITORY_URL`: {err}"); - process::exit(1); - } - } - }; + rocket::build() + .mount("/", routes![open, closed, show_issue, styles]) + .manage(config) + .ignite() + .await + .expect("This error should only happen on a miss-configuration.") + .launch() + .await?; - SOURCE_CODE_REPOSITORY - .set(source_code_url) - .expect("This should be unset by this stage"); - - REPOSITORY - .set( - ThreadSafeRepository::open(&repository_path).unwrap_or_else(|err| { - eprintln!( - "Error while opening repository ('{}'): {} ", - repository_path.display(), - err - ); - process::exit(1); - }), - ) - .expect("There should be only one thread accessing this right now"); - - rocket::build().mount("/", routes![open, closed, show_issue, styles]) + Ok(()) } |