use std::path::PathBuf; use dirs::config_dir; #[macro_use] extern crate rocket; mod config; use config::read_config; use rocket::{State, http::Status}; use crate::config::Config; const BIN_NAME: &str = "build-joeac"; #[launch] fn rocket() -> _ { let config_path: PathBuf = config_dir().unwrap() .join(BIN_NAME).join(BIN_NAME).with_added_extension("toml"); let config = read_config(&config_path).inspect_err(|err| eprintln!("Failed to read config. Error: {}\nProceeding with defaults", err)) .unwrap_or(Config::default()); rocket::build().manage(config).mount("/", routes![index]) } #[get("/")] fn index(remote_git_repo: PathBuf, config: &State) -> (Status, String) { match remote_git_repo.to_str() { None => (Status::BadRequest, format!("Failed to convert request path to unicode: {:?}", remote_git_repo)), Some(remote_git_repo) => match config.repositories.iter().find(|repo| repo.remote_git_repo.eq(remote_git_repo)) { None => (Status::NotFound, format!("Remote git repository not configured: {remote_git_repo}")), Some(repo) => (Status::Ok, format!("Matched! {:?}", repo)) } } }