1use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8pub struct ContributorsClient {
10 base_url: String,
11 client: Client,
12}
13
14impl ContributorsClient {
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_group_members_access_level(
28 &self,
29 group: String,
30 include_inherit: Option<bool>,
31 ) -> Result<Value> {
32 let path = format!("/{}/-/members/access-level", group);
33 let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
34
35 if let Some(value) = include_inherit {
36 url.query_pairs_mut().append_pair("include_inherit", &value.to_string());
37 }
38
39 let request = self.client.request(
40 reqwest::Method::GET,
41 url
42 );
43
44
45
46
47 let response = request.send().await?;
48
49 if response.status().is_success() {
50 let json: Value = response.json().await?;
51 Ok(json)
52 } else {
53 Err(ApiError::HttpError(response.status().as_u16()))
54 }
55 }
56
57 pub async fn get_repo_members_username_access_level(
59 &self,
60 repo: String,
61 username: String,
62 ) -> Result<Value> {
63 let path = format!("/{}/-/members/{}/access-level", repo, username);
64 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
65
66
67 let request = self.client.request(
68 reqwest::Method::GET,
69 url
70 );
71
72
73
74
75 let response = request.send().await?;
76
77 if response.status().is_success() {
78 let json: Value = response.json().await?;
79 Ok(json)
80 } else {
81 Err(ApiError::HttpError(response.status().as_u16()))
82 }
83 }
84
85 pub async fn get_repo_members_access_level(
87 &self,
88 repo: String,
89 include_inherit: Option<bool>,
90 ) -> Result<Value> {
91 let path = format!("/{}/-/members/access-level", repo);
92 let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
93
94 if let Some(value) = include_inherit {
95 url.query_pairs_mut().append_pair("include_inherit", &value.to_string());
96 }
97
98 let request = self.client.request(
99 reqwest::Method::GET,
100 url
101 );
102
103
104
105
106 let response = request.send().await?;
107
108 if response.status().is_success() {
109 let json: Value = response.json().await?;
110 Ok(json)
111 } else {
112 Err(ApiError::HttpError(response.status().as_u16()))
113 }
114 }
115
116 pub async fn get_group_members_username_access_level(
118 &self,
119 group: String,
120 username: String,
121 ) -> Result<Value> {
122 let path = format!("/{}/-/members/{}/access-level", group, username);
123 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
124
125
126 let request = self.client.request(
127 reqwest::Method::GET,
128 url
129 );
130
131
132
133
134 let response = request.send().await?;
135
136 if response.status().is_success() {
137 let json: Value = response.json().await?;
138 Ok(json)
139 } else {
140 Err(ApiError::HttpError(response.status().as_u16()))
141 }
142 }
143
144}