diff --git a/home-manager/packages/habitask/Cargo.lock b/home-manager/packages/habitask/Cargo.lock index 1dd35d2c..86932cb9 100644 --- a/home-manager/packages/habitask/Cargo.lock +++ b/home-manager/packages/habitask/Cargo.lock @@ -254,6 +254,7 @@ name = "habitask" version = "0.1.0" dependencies = [ "config 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/home-manager/packages/habitask/Cargo.nix b/home-manager/packages/habitask/Cargo.nix index 0c0405c6..ea062cb9 100644 --- a/home-manager/packages/habitask/Cargo.nix +++ b/home-manager/packages/habitask/Cargo.nix @@ -1567,10 +1567,11 @@ rec { num_cpus_1_8_0.default = true; }) [ futures_0_1_23_features num_cpus_1_8_0_features ]; habitask_0_1_0 = { features?(habitask_0_1_0_features {}) }: habitask_0_1_0_ { - dependencies = mapFeatures features ([ config_0_9_0 hyper_0_11_27 reqwest_0_8_6 serde_1_0_70 serde_derive_1_0_70 serde_json_1_0_24 task_hookrs_0_5_0 ]); + dependencies = mapFeatures features ([ config_0_9_0 error_chain_0_11_0 hyper_0_11_27 reqwest_0_8_6 serde_1_0_70 serde_derive_1_0_70 serde_json_1_0_24 task_hookrs_0_5_0 ]); }; habitask_0_1_0_features = f: updateFeatures f (rec { config_0_9_0.default = true; + error_chain_0_11_0.default = true; habitask_0_1_0.default = (f.habitask_0_1_0.default or true); hyper_0_11_27.default = true; reqwest_0_8_6.default = true; @@ -1578,7 +1579,7 @@ rec { serde_derive_1_0_70.default = true; serde_json_1_0_24.default = true; task_hookrs_0_5_0.default = true; - }) [ config_0_9_0_features hyper_0_11_27_features reqwest_0_8_6_features serde_1_0_70_features serde_derive_1_0_70_features serde_json_1_0_24_features task_hookrs_0_5_0_features ]; + }) [ config_0_9_0_features error_chain_0_11_0_features hyper_0_11_27_features reqwest_0_8_6_features serde_1_0_70_features serde_derive_1_0_70_features serde_json_1_0_24_features task_hookrs_0_5_0_features ]; httparse_1_3_2 = { features?(httparse_1_3_2_features {}) }: httparse_1_3_2_ { features = mkFeatures (features.httparse_1_3_2 or {}); }; diff --git a/home-manager/packages/habitask/src/main.rs b/home-manager/packages/habitask/src/main.rs index 1586f079..4b1d7992 100644 --- a/home-manager/packages/habitask/src/main.rs +++ b/home-manager/packages/habitask/src/main.rs @@ -22,6 +22,10 @@ use config::{Config, Environment}; error_chain! { foreign_links { Io(::std::io::Error); + Reqwust(::reqwest::Error); + Utf8(::std::str::Utf8Error); + JSON(::serde_json::Error); + Config(::config::ConfigError); } } @@ -74,10 +78,10 @@ impl Habitask { let mut s = Config::new(); s.merge(Environment::with_prefix("habitask"))?; let s = s.try_into()?; - Habitask { + Ok(Habitask { client: Client::new(), settings: s, - } + }) } fn login(&self, mut builder: RequestBuilder) -> RequestBuilder { @@ -95,7 +99,7 @@ impl Habitask { fn make_todo(&self, name: &str, prio: &str, tasks: Vec) -> Result<()> { if tasks.len() == 0 { - return; + return Ok(()); } let Todo { id, .. } = self.create_todo(name, prio)?; let mut checklist: Vec = Vec::new(); @@ -112,40 +116,34 @@ impl Habitask { fn create_todo(&self, name: &str, prio: &str) -> Result { let map = vec![("text", name), ("type", "todo"), ("priority", prio)]; - self.post("https://habitica.com/api/v3/tasks/user") - .json(&map) - .send()? - .json::()? - .data + Ok( + self.post("https://habitica.com/api/v3/tasks/user") + .json(&map) + .send()? + .json::()? + .data, + ) } fn add_item(&self, id: &str, item: &str) -> Result { let map = vec![("text", item)]; let url = format!("https://habitica.com/api/v3/tasks/{}/checklist", id); - Ok(self.post(&url) - .json(&map) - .send()? - .json::()? - .data) + Ok(self.post(&url).json(&map).send()?.json::()?.data) } - fn check_item(&self, id: &str, item: &str) -> Result<()>{ + fn check_item(&self, id: &str, item: &str) -> Result<()> { let url = format!( "https://habitica.com/api/v3/tasks/{}/checklist/{}/score", id, item ); - self.post(&url) - .json(&Vec::<(&str, &str)>::new()) - .send()?; + self.post(&url).json(&Vec::<(&str, &str)>::new()).send()?; Ok(()) } - fn score_task(&self, id: &str) -> Result<()>{ + fn score_task(&self, id: &str) -> Result<()> { let url = format!("https://habitica.com/api/v3/tasks/{}/score/up", id); - self.post(&url) - .json(&Vec::<(&str, &str)>::new()) - .send(); + self.post(&url).json(&Vec::<(&str, &str)>::new()).send()?; Ok(()) } } @@ -180,14 +178,30 @@ fn main() -> Result<()> { blink(); } habitask.make_todo("Routinen erledigt!", "0.1", routines)?; - habitask.make_todo("Herausforderungen bezwungen!", "1", tasks)?; + habitask.make_todo( + "Herausforderungen bezwungen!", + "1", + tasks, + )?; habitask.make_todo( "Ein paar Tage alte Herausforderungen bezwungen!", "1.5", a_little_old, )?; - habitask.make_todo("Einige Wochen alte Herausforderungen bezwungen!", "2", old)?; - habitask.make_todo("Monate alte Herausforderungen bezwungen!", "2", very_old)?; - habitask.make_todo("Uralte Herausforderungen bezwungen!", "2", crazy_old)?; + habitask.make_todo( + "Einige Wochen alte Herausforderungen bezwungen!", + "2", + old, + )?; + habitask.make_todo( + "Monate alte Herausforderungen bezwungen!", + "2", + very_old, + )?; + habitask.make_todo( + "Uralte Herausforderungen bezwungen!", + "2", + crazy_old, + )?; Ok(()) }