From 51bfe0ab4b704fdf5bc50baaac9d933c9caab9e6 Mon Sep 17 00:00:00 2001 From: hodasemi Date: Mon, 16 Oct 2023 14:19:36 +0200 Subject: [PATCH] Fix tibber handler --- src/tibber_handler.rs | 80 +++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 52 deletions(-) diff --git a/src/tibber_handler.rs b/src/tibber_handler.rs index e9d10fb..17dccf4 100644 --- a/src/tibber_handler.rs +++ b/src/tibber_handler.rs @@ -65,63 +65,36 @@ impl TibberHandler { } pub async fn current_prices(&self) -> Result> { - let mut v = Vec::new(); - - for (home_id, house) in self.homes.iter() { - v.push(( - house.clone(), - tokio::task::spawn_blocking(move || { - self.session.get_current_price(home_id).map_err(|err| { - Error::msg(format!( - "TibberHandler: failed getting current price: {err:?}" - )) - }) - }) - .await?, - )); - } - - Ok(v) + self.get_data(|session, home_id| { + session.get_current_price(home_id).map_err(|err| { + Error::msg(format!( + "TibberHandler: failed getting current price: {err:?}" + )) + }) + }) + .await } pub async fn prices_today(&self) -> Result)>> { - let mut v = Vec::new(); - - for (home_id, house) in self.homes.iter() { - v.push(( - house.clone(), - tokio::task::spawn_blocking(move || { - self.session.get_prices_today(home_id).map_err(|err| { - Error::msg(format!( - "TibberHandler: failed getting prices of today: {err:?}" - )) - }) - }) - .await?, - )); - } - - Ok(v) + self.get_data(|session, home_id| { + session.get_prices_today(home_id).map_err(|err| { + Error::msg(format!( + "TibberHandler: failed getting prices of today: {err:?}" + )) + }) + }) + .await } pub async fn prices_tomorrow(&self) -> Result)>> { - let mut v = Vec::new(); - - for (home_id, house) in self.homes.iter() { - v.push(( - house.clone(), - tokio::task::spawn_blocking(move || { - self.session.get_prices_tomorrow(home_id).map_err(|err| { - Error::msg(format!( - "TibberHandler: failed getting prices for tomorrow: {err:?}" - )) - }) - }) - .await?, - )); - } - - Ok(v) + self.get_data(|session, home_id| { + session.get_prices_tomorrow(home_id).map_err(|err| { + Error::msg(format!( + "TibberHandler: failed getting prices for tomorrow: {err:?}" + )) + }) + }) + .await } pub async fn consumption( @@ -166,7 +139,10 @@ mod test { #[tokio::test] async fn test_connection() -> Result<()> { - TibberHandler::new(fs::read_to_string("tibber_token.txt")?).await?; + let tibber = TibberHandler::new(fs::read_to_string("tibber_token.txt")?).await?; + let current_prices = tibber.current_prices().await?; + + println!("{current_prices:?}"); Ok(()) }