diff options
Diffstat (limited to 'pkgs/by-name/ba/back/src/main.rs')
-rw-r--r-- | pkgs/by-name/ba/back/src/main.rs | 89 |
1 files changed, 35 insertions, 54 deletions
diff --git a/pkgs/by-name/ba/back/src/main.rs b/pkgs/by-name/ba/back/src/main.rs index 86fe196..b75737a 100644 --- a/pkgs/by-name/ba/back/src/main.rs +++ b/pkgs/by-name/ba/back/src/main.rs @@ -9,62 +9,43 @@ // 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 gix::ThreadSafeRepository; -use rocket::{launch, routes}; -use url::Url; - -use crate::issues::{closed, open, show_issue, styles}; - -mod issues; - -static REPOSITORY: OnceLock<ThreadSafeRepository> = OnceLock::new(); -static SOURCE_CODE_REPOSITORY: OnceLock<Url> = OnceLock::new(); +use std::process; + +use clap::Parser; +use config::BackConfig; +use rocket::routes; + +use crate::web::{closed, open, show_issue, styles}; + +mod cli; +pub mod config; +mod error; +pub mod git_bug; +mod web; + +fn main() -> Result<(), String> { + if let Err(err) = rocket_main() { + eprintln!("Error {err}"); + process::exit(1); + } else { + Ok(()) + } +} -#[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::main] +async fn rocket_main() -> Result<(), error::Error> { + let args = cli::Cli::parse(); - SOURCE_CODE_REPOSITORY - .set(source_code_url) - .expect("This should be unset by this stage"); + let config = BackConfig::from_config_file(&args.config_file)?; - 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]) + .manage(config) + .ignite() + .await + .expect("This error should only happen on a miss-configuration.") + .launch() + .await?; - rocket::build().mount("/", routes![open, closed, show_issue, styles]) + Ok(()) } |