1use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8pub struct ActivitiesClient {
10 base_url: String,
11 client: Client,
12}
13
14impl ActivitiesClient {
15 pub fn new(base_url: String, client: Client) -> Self {
17 Self { base_url, client }
18 }
19
20 pub fn with_auth(self, token: &str) -> Self {
22 self
24 }
25
26 pub async fn get_users_username_repo_activities_activity_type(
28 &self,
29 username: String,
30 activity_type: String,
31 slug: String,
32 date: String,
33 ) -> Result<Value> {
34 let path = format!("/users/{}/repo-activities/{}", username, activity_type);
35 let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
36
37 url.query_pairs_mut().append_pair("slug", &slug.to_string());
38 url.query_pairs_mut().append_pair("date", &date.to_string());
39
40 let request = self.client.request(
41 reqwest::Method::GET,
42 url
43 );
44
45
46
47
48 let response = request.send().await?;
49
50 if response.status().is_success() {
51 let json: Value = response.json().await?;
52 Ok(json)
53 } else {
54 Err(ApiError::HttpError(response.status().as_u16()))
55 }
56 }
57
58 pub async fn get_users_username_activities(
60 &self,
61 username: String,
62 date: Option<String>,
63 ) -> Result<Value> {
64 let path = format!("/users/{}/activities", username);
65 let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
66
67 if let Some(value) = date {
68 url.query_pairs_mut().append_pair("date", &value.to_string());
69 }
70
71 let request = self.client.request(
72 reqwest::Method::GET,
73 url
74 );
75
76
77
78
79 let response = request.send().await?;
80
81 if response.status().is_success() {
82 let json: Value = response.json().await?;
83 Ok(json)
84 } else {
85 Err(ApiError::HttpError(response.status().as_u16()))
86 }
87 }
88
89}