fn help() { println!("\n\nHELP: tangled-on-commit\n\n") } #[derive(Debug)] struct Config { handle: String, repo_name: String, shell: String, } fn load_config() -> Result { // load config from cli args if present // if omitted, fallback to a local `tangled-on-commit.json` file // if key omitted or file not found, fall back to env // if env omitted, error out and quit return Ok(Config { handle: String::from(""), repo_name: String::from(""), shell: String::from("") }); } fn main() -> Result<(), ()> { // load configuration let config = match load_config() { Ok(res) => res, Err(_) => { // q return Err(()) } }; println!("{:#?}", config); // resolve handle to did // resolve did+repoName to knotserver // connect to /events on knotserver // on event: // parse json // validate meets expected schema (allow unknown vals) // filter by did and reponame // exec shell command in user shell (/bin/sh as fallback) return Ok(()) }