use crate::error::{ApiError, Result};
use reqwest::Client;
use serde_json::Value;
use url::Url;
pub struct ActivitiesClient {
base_url: String,
client: Client,
}
impl ActivitiesClient {
pub fn new(base_url: String, client: Client) -> Self {
Self { base_url, client }
}
pub fn with_auth(self, token: &str) -> Self {
self
}
pub async fn get_users_username_repo_activities_activity_type(
&self,
username: String,
activity_type: String,
slug: String,
date: String,
) -> Result<Value> {
let path = format!("/users/{}/repo-activities/{}", username, activity_type);
let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
url.query_pairs_mut().append_pair("slug", &slug.to_string());
url.query_pairs_mut().append_pair("date", &date.to_string());
let request = self.client.request(
reqwest::Method::GET,
url
);
let response = request.send().await?;
if response.status().is_success() {
let json: Value = response.json().await?;
Ok(json)
} else {
Err(ApiError::HttpError(response.status().as_u16()))
}
}
pub async fn get_users_username_activities(
&self,
username: String,
date: Option<String>,
) -> Result<Value> {
let path = format!("/users/{}/activities", username);
let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
if let Some(value) = date {
url.query_pairs_mut().append_pair("date", &value.to_string());
}
let request = self.client.request(
reqwest::Method::GET,
url
);
let response = request.send().await?;
if response.status().is_success() {
let json: Value = response.json().await?;
Ok(json)
} else {
Err(ApiError::HttpError(response.status().as_u16()))
}
}
}