strava_wrapper/filters/
activities.rs1use crate::models::{Activity, CreateActivity, DetailedActivity, UpdatableActivity};
2use crate::query::{
3 get_with_query_and_path, post_form, put_json, Endpoint, ErrorWrapper, IncludeAllEfforts,
4 PathQuery, Query, Sendable, ID,
5};
6use async_trait::async_trait;
7use std::collections::HashMap;
8use strava_wrapper_macros::{Endpoint, IncludeAllEfforts, PathQuery, Query, ID};
9
10#[derive(Debug, Clone, Endpoint, Query, PathQuery, ID, IncludeAllEfforts)]
11#[must_use = "this request is not executed until you call .send().await"]
12pub struct GetActivity {
13 url: String,
14 token: String,
15 path: String,
16 query: Vec<(String, String)>,
17 path_params: Vec<(String, String)>,
18}
19
20#[async_trait]
21impl Sendable<Activity> for GetActivity {
22 async fn send(self) -> Result<Activity, ErrorWrapper> {
23 let token = self.token.clone();
24 get_with_query_and_path(self, &token).await
25 }
26}
27
28#[must_use = "this request is not executed until you call .send().await"]
31pub struct CreateActivityRequest {
32 url: String,
33 token: String,
34 body: CreateActivity,
35}
36
37impl CreateActivityRequest {
38 pub fn new(url: impl Into<String>, token: impl Into<String>, body: CreateActivity) -> Self {
39 Self {
40 url: url.into(),
41 token: token.into(),
42 body,
43 }
44 }
45}
46
47#[async_trait]
48impl Sendable<DetailedActivity> for CreateActivityRequest {
49 async fn send(self) -> Result<DetailedActivity, ErrorWrapper> {
50 let url = format!("{}/v3/activities", self.url);
51 post_form(&url, &self.token, &self.body).await
52 }
53}
54
55#[must_use = "this request is not executed until you call .send().await"]
58pub struct UpdateActivityRequest {
59 url: String,
60 token: String,
61 id: u64,
62 body: UpdatableActivity,
63}
64
65impl UpdateActivityRequest {
66 pub fn new(
67 url: impl Into<String>,
68 token: impl Into<String>,
69 id: u64,
70 body: UpdatableActivity,
71 ) -> Self {
72 Self {
73 url: url.into(),
74 token: token.into(),
75 id,
76 body,
77 }
78 }
79}
80
81#[async_trait]
82impl Sendable<DetailedActivity> for UpdateActivityRequest {
83 async fn send(self) -> Result<DetailedActivity, ErrorWrapper> {
84 let url = format!("{}/v3/activities/{}", self.url, self.id);
85 put_json(&url, &self.token, &self.body).await
86 }
87}