rust_cnb/
activities.rs

1//! Activities API 客户端
2
3use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8/// Activities API 客户端
9pub struct ActivitiesClient {
10    base_url: String,
11    client: Client,
12}
13
14impl ActivitiesClient {
15    /// 创建新的 Activities API 客户端
16    pub fn new(base_url: String, client: Client) -> Self {
17        Self { base_url, client }
18    }
19
20    /// 设置认证信息
21    pub fn with_auth(self, token: &str) -> Self {
22        // 这里可以扩展认证逻辑
23        self
24    }
25
26    /// 个人仓库动态详情列表
27    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    /// 获取个人动态活跃详情汇总
59    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}