From f849de20bb3ef7a36a5806108d853c577609991e Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Fri, 15 May 2026 15:27:33 +0100 Subject: [PATCH] can configure repositories, hello world response --- src/config.rs | 20 +++++++++++--------- src/main.rs | 31 +++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/config.rs b/src/config.rs index f27f5f9..5d17bfc 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,22 +1,24 @@ +use std::path::PathBuf; + use anyhow::Context; use serde::Deserialize; -fn read_config(path: &str) -> anyhow::Result { +pub fn read_config(path: &PathBuf) -> anyhow::Result { let toml = std::fs::read(path) - .with_context(|| format!("Failed to read config file at {path}"))?; + .with_context(|| format!("Failed to read config file at {:#?}", path))?; let config = toml::from_slice(&toml) - .with_context(|| format!("Failed to parse config file at {path}"))?; + .with_context(|| format!("Failed to parse config file at {:#?}", path))?; Ok(config) } -#[derive(Deserialize)] +#[derive(Debug, Default, Deserialize)] pub struct Config { - repositories: Vec, + pub repositories: Vec, } -#[derive(Deserialize)] +#[derive(Debug, Deserialize)] pub struct RepoConfig { - remote_git_repo: String, - local_git_repo: String, - remote_package_repo: String, + pub remote_git_repo: String, + pub local_git_repo: String, + pub remote_package_repo: String, } diff --git a/src/main.rs b/src/main.rs index 2c4d073..215f9e6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,36 @@ +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() -> _ { - rocket::build().mount("/", routes![index]) + 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() -> &'static str { - "Hello, world!" +#[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)) + } + } }