use crate::api::helpers::fetch_strava_data;
use crate::api::strava_v3;
use crate::models::activities;
use log::{info, trace};
use std::collections::HashMap;
#[derive(Debug)]
pub struct ActivitiesParams {
pub access_token: String,
pub before: Option<String>,
pub after: Option<String>,
pub per_page: Option<String>,
pub page: Option<String>,
}
fn prepare_params(params: &ActivitiesParams) -> HashMap<&str, String> {
let mut map_params = HashMap::new();
map_params.insert("access_token", params.access_token.clone());
if let Some(before) = ¶ms.before {
map_params.insert("before", before.clone());
}
if let Some(after) = ¶ms.after {
map_params.insert("after", after.clone());
}
if let Some(per_page) = ¶ms.per_page {
map_params.insert("per_page", per_page.clone());
}
if let Some(page) = ¶ms.page {
map_params.insert("page", page.clone());
}
map_params
}
pub fn get_activities(
params: &ActivitiesParams,
) -> Result<activities::ActivityCollection, Box<dyn std::error::Error>> {
let map_params = prepare_params(params);
trace!("Athlete API parameters: {:?}", map_params);
let client = reqwest::blocking::Client::new();
let url = strava_v3("athlete/activities".to_string());
let response = client.get(url).query(&map_params).send()?;
let json: activities::ActivityCollection = response.json()?;
Ok(json)
}
pub fn get_activities_by_id(
access_token: &str,
activity_id: &str,
) -> Result<activities::ActivityElement, Box<dyn std::error::Error>> {
info!("Calling Activities by ID API\n");
fetch_strava_data(format!("/activities/{}", activity_id), access_token)
}