strava_wrapper/filters/
athlete.rs

1use crate::models::{Activity, DetailedAthlete, Lap};
2use crate::query::{
3    get_with_query_and_path, After, Before, Endpoint, ErrorWrapper, Page, PathQuery, PerPage,
4    Query, Sendable, ID,
5};
6use async_trait::async_trait;
7use std::collections::HashMap;
8use strava_wrapper_macros::{After, Before, Endpoint, Page, PathQuery, PerPage, Query, ID};
9
10// TODO: "Tokens with profile:read_all scope will receive a detailed athlete representation; all others will receive a summary representation."
11
12#[derive(Debug, Clone, Endpoint, Query, PathQuery)]
13pub struct GetAthlete {
14    url: String,
15    token: String,
16    path: String,
17    query: Vec<(String, String)>,
18    path_params: Vec<(String, String)>,
19}
20
21#[async_trait]
22impl Sendable<DetailedAthlete> for GetAthlete {
23    async fn send(mut self) -> Result<DetailedAthlete, ErrorWrapper> {
24        // TODO test GET with no query+path params
25        get_with_query_and_path(self.clone(), &self.token).await
26    }
27}
28
29#[derive(Debug, Clone, Endpoint, Query, PathQuery, ID)]
30pub struct ListAthleteClubs {
31    url: String,
32    token: String,
33    path: String,
34    query: Vec<(String, String)>,
35    path_params: Vec<(String, String)>,
36}
37
38#[async_trait]
39impl Sendable<Vec<Lap>> for ListAthleteClubs {
40    async fn send(mut self) -> Result<Vec<Lap>, ErrorWrapper> {
41        get_with_query_and_path(self.clone(), &self.token).await
42    }
43}
44
45#[derive(Debug, Clone, Endpoint, Query, PathQuery, Before, After, Page, PerPage)]
46pub struct ListAthleteActivities {
47    url: String,
48    token: String,
49    path: String,
50    query: Vec<(String, String)>,
51    path_params: Vec<(String, String)>,
52}
53
54#[async_trait]
55impl Sendable<Vec<Activity>> for ListAthleteActivities {
56    async fn send(mut self) -> Result<Vec<Activity>, ErrorWrapper> {
57        get_with_query_and_path(self.clone(), &self.token).await
58    }
59}