summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.rs20
-rw-r--r--src/main.rs31
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))
+ }
+ }
}