From ca69f19d0492ae420ba54a158676d246b0307be0 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Tue, 4 Feb 2020 10:48:34 -0500 Subject: Create data type for user visible entries --- src/importer.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'src/importer.rs') diff --git a/src/importer.rs b/src/importer.rs index b1c1b18..c831ca9 100644 --- a/src/importer.rs +++ b/src/importer.rs @@ -10,6 +10,7 @@ use std::time::Duration; use std::time::Instant; use threadpool::ThreadPool; use serde_json::to_value; +use serde_json::Value; use crate::diesel::Connection; use crate::db; @@ -119,7 +120,7 @@ impl Importer { *running = true; pool.execute({ let shared = self.shared.clone(); - move || run_periodically(shared, Duration::from_secs(10)) + move || run_periodically(shared, Duration::from_secs(5)) }); } } @@ -130,6 +131,44 @@ impl Importer { } } +fn to_run(data: &Value) -> Result { + info!("to_run"); + macro_rules! get { + ($id:ident str $e:expr) => { + $id[$e].as_str().ok_or_else( + || Error::UnexpectedJson($id.clone())) + }; + + ($id:ident f64 $e:expr) => { + $id[$e].as_f64().ok_or_else( + || Error::UnexpectedJson($id.clone())) + }; + }; + + Ok(json!({ + "type": "run", + "distance": get!(data f64 "distance")?, + "elapsed_time": get!(data f64 "elapsed_time")?, + })) +} + +fn process_strava_activity( + shared: Arc>, + data: models::RawData) -> Result { + + let json_error = || Error::UnexpectedJson(data.payload.clone()); + let dtype = data.payload["type"].as_str().ok_or_else(json_error)?; + + let payload = match dtype { + "Run" => { + to_run(&data.payload)? + }, + &_ => Err(Error::InternalError)?, + }; + + Ok(payload) +} + fn process_raw_data( shared: Arc>, key: &models::RawDataKey, @@ -138,7 +177,18 @@ fn process_raw_data( let data = db::get_raw_data(&shared.conn.lock().unwrap(), key)?; println!("Process raw data: {:#?}", data); + let payload = match data.data_type { + models::DataType::StravaActivity => { + process_strava_activity(shared.clone(), data)? + } + }; + + info!("Process finished. Payload: {:#?}", payload); unimplemented!(); + + task.state = models::TaskState::SUCCESSFUL; + db::update_task(&shared.conn.lock().unwrap(), task)?; + Ok(()) } fn process_all_raw_data( -- cgit v1.2.3