gitea_sdk/api/orgs/
members.rs1use build_it::Builder;
2use reqwest::StatusCode;
3use serde::Serialize;
4
5use crate::{error::Result, model::user::User, Client};
6
7#[derive(Debug, Clone, Builder, Serialize)]
8#[build_it(into)]
9pub struct ListMembersBuilder {
10 #[serde(skip)]
11 #[build_it(skip)]
12 org: String,
13 page: Option<i64>,
15 limit: Option<i64>,
17}
18
19#[derive(Debug, Clone)]
20pub struct IsMemberBuilder {
21 org: String,
22 username: String,
23}
24
25#[derive(Debug, Clone)]
26pub struct RemoveMemberBuilder {
27 org: String,
28 username: String,
29}
30
31impl ListMembersBuilder {
32 pub fn new(org: impl ToString) -> Self {
33 Self {
34 org: org.to_string(),
35 page: None,
36 limit: None,
37 }
38 }
39 pub async fn send(&self, client: &Client) -> Result<Vec<User>> {
42 let req = client
43 .get(format!("/orgs/{}/members", self.org))
44 .query(self)
45 .build()?;
46 let res = client.make_request(req).await?;
47 client.parse_response(res).await
48 }
49}
50
51impl IsMemberBuilder {
52 pub fn new(org: impl ToString, username: impl ToString) -> Self {
53 Self {
54 org: org.to_string(),
55 username: username.to_string(),
56 }
57 }
58 pub async fn send(&self, client: &Client) -> Result<bool> {
60 let Self { org, username } = self;
61 let req = client
62 .get(format!("/orgs/{org}/members/{username}"))
63 .build()?;
64 match client.make_request(req).await {
65 Ok(_) => Ok(true),
66 Err(e) => {
67 if e.status_code == StatusCode::NOT_FOUND {
68 Ok(false)
69 } else {
70 Err(e)
71 }
72 }
73 }
74 }
75}
76
77impl RemoveMemberBuilder {
78 pub fn new(org: impl ToString, username: impl ToString) -> Self {
79 Self {
80 org: org.to_string(),
81 username: username.to_string(),
82 }
83 }
84 pub async fn send(&self, client: &Client) -> Result<()> {
86 let Self { org, username } = self;
87 let req = client
88 .delete(format!("/orgs/{org}/members/{username}"))
89 .build()?;
90 let _ = client.make_request(req).await?;
91 Ok(())
92 }
93}