1use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8pub struct BadgeClient {
10 base_url: String,
11 client: Client,
12}
13
14impl BadgeClient {
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_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 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 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}