Skip to main content

rust_cnb/
badge.rs

1//! Badge API 客户端
2
3use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8/// Badge API 客户端
9pub struct BadgeClient {
10    base_url: String,
11    client: Client,
12}
13
14impl BadgeClient {
15    /// 创建新的 Badge 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    /// 获取徽章列表数据。List badge data
27    pub async fn get_repo_badge_list(
28        &self,
29        repo: String,
30        request_data: serde_json::Value,
31    ) -> Result<Value> {
32        let path = format!("/{}/-/badge/list", repo);
33        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
34        
35
36        
37        let mut request = self.client.request(
38            reqwest::Method::GET,
39            url
40        );
41
42
43
44        request = request.json(&request_data);
45
46        let response = request.send().await?;
47        
48        if response.status().is_success() {
49            let json: Value = response.json().await?;
50            Ok(json)
51        } else {
52            Err(ApiError::HttpError(response.status().as_u16()))
53        }
54    }
55
56    /// 获取徽章 svg 或 JSON 数据。Get badge svg or JSON data.
57    pub async fn get_repo_badge_git_sha_badge(
58        &self,
59        repo: String,
60        sha: String,
61        badge: String,
62        request_data: serde_json::Value,
63    ) -> Result<Value> {
64        let path = format!("/{}/-/badge/git/{}/{}", repo, sha, badge);
65        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
66        
67
68        
69        let mut request = self.client.request(
70            reqwest::Method::GET,
71            url
72        );
73
74
75
76        request = request.json(&request_data);
77
78        let response = request.send().await?;
79        
80        if response.status().is_success() {
81            let json: Value = response.json().await?;
82            Ok(json)
83        } else {
84            Err(ApiError::HttpError(response.status().as_u16()))
85        }
86    }
87
88    /// 上传徽章数据。Upload badge data
89    pub async fn post_repo_badge_upload(
90        &self,
91        repo: String,
92        request_data: serde_json::Value,
93    ) -> Result<Value> {
94        let path = format!("/{}/-/badge/upload", repo);
95        let url = Url::parse(&format!("{}{}", self.base_url, path))?;
96        
97
98        
99        let mut request = self.client.request(
100            reqwest::Method::POST,
101            url
102        );
103
104
105
106        request = request.json(&request_data);
107
108        let response = request.send().await?;
109        
110        if response.status().is_success() {
111            let json: Value = response.json().await?;
112            Ok(json)
113        } else {
114            Err(ApiError::HttpError(response.status().as_u16()))
115        }
116    }
117
118}