strava_wrapper/filters/
activities.rs1use crate::models::Activity;
2use crate::query::{
3 get_with_query_and_path, Endpoint, ErrorWrapper, PathQuery, Query, Sendable, ID,
4};
5use async_trait::async_trait;
6use std::collections::HashMap;
7
8#[derive(Debug, Clone)]
9pub struct ActivityFilter {
10 url: String,
11 token: String,
12 path: String,
13 query: Vec<(String, String)>,
14 path_params: Vec<(String, String)>,
15}
16
17impl ActivityFilter {
18 pub fn new(url: impl Into<String>, token: impl Into<String>, path: impl Into<String>) -> Self {
19 Self {
20 url: url.into(),
21 token: token.into(),
22 path: path.into(),
23 query: Vec::new(),
24 path_params: Vec::new(),
25 }
26 }
27}
28
29#[async_trait]
30impl Sendable<ActivityFilter, Activity> for ActivityFilter {
31 async fn send(mut self) -> Result<Activity, ErrorWrapper> {
32 get_with_query_and_path(self.clone(), &self.token).await
33 }
34}
35
36impl Query for ActivityFilter {
37 fn get_query_params(self) -> Vec<(String, String)> {
38 self.query
39 }
40}
41
42impl PathQuery for ActivityFilter {
43 fn get_path_params(&self) -> HashMap<String, String> {
44 self.path_params.iter().cloned().collect()
45 }
46}
47
48impl ID for ActivityFilter {
49 fn id(mut self, id: u64) -> Self {
50 self.path_params.push(("id".to_string(), id.to_string()));
51 self
52 }
53}
54
55impl Endpoint for ActivityFilter {
56 fn endpoint(&self) -> String {
57 format!("{}/{}", self.url, self.path)
58 }
59}
60
61#[derive(Debug, Clone)]
62pub struct GetActivity {
63 token: String,
64 path: String,
65 query: Vec<(String, String)>,
66 path_params: Vec<(String, String)>,
67}
68
69impl GetActivity {
70 pub fn new(token: String, path: String) -> Self {
71 Self {
72 token,
73 path,
74 query: Vec::new(),
75 path_params: Vec::new(),
76 }
77 }
78}