diff options
| author | Joe Carstairs <me@joeac.net> | 2026-05-15 15:27:33 +0100 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2026-05-15 15:27:33 +0100 |
| commit | f849de20bb3ef7a36a5806108d853c577609991e (patch) | |
| tree | fd1e888d3d3bb8077483eed83bf9d2fcfb7c32dc /src | |
| parent | 2068342144fe093efba9b9ff080017d294da7b6d (diff) | |
can configure repositories, hello world response
Diffstat (limited to 'src')
| -rw-r--r-- | src/config.rs | 20 | ||||
| -rw-r--r-- | 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<Config> { +pub fn read_config(path: &PathBuf) -> anyhow::Result<Config> { 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<RepoConfig>, + pub repositories: Vec<RepoConfig>, } -#[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("/<remote_git_repo..>")] +fn index(remote_git_repo: PathBuf, config: &State<Config>) -> (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)) + } + } } |
