open_lark/service/cloud_docs/wiki/v2/space_member/
delete.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::core::{
5 api_req::ApiRequest,
6 api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
7 config::Config,
8 constants::AccessTokenType,
9 endpoints::{cloud_docs::*, EndpointBuilder},
10 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13};
14
15#[derive(Debug, Serialize, Default)]
17pub struct DeleteSpaceMemberRequest {
18 #[serde(skip)]
19 api_request: ApiRequest,
20 #[serde(skip)]
22 space_id: String,
23 #[serde(skip)]
25 member_id: String,
26 #[serde(skip)]
28 member_type: Option<String>,
29}
30
31impl DeleteSpaceMemberRequest {
32 pub fn builder() -> DeleteSpaceMemberRequestBuilder {
33 DeleteSpaceMemberRequestBuilder::default()
34 }
35
36 pub fn new(space_id: impl ToString, member_id: impl ToString) -> Self {
37 Self {
38 space_id: space_id.to_string(),
39 member_id: member_id.to_string(),
40 ..Default::default()
41 }
42 }
43}
44
45#[derive(Default)]
46pub struct DeleteSpaceMemberRequestBuilder {
47 request: DeleteSpaceMemberRequest,
48}
49
50impl DeleteSpaceMemberRequestBuilder {
51 pub fn space_id(mut self, space_id: impl ToString) -> Self {
53 self.request.space_id = space_id.to_string();
54 self
55 }
56
57 pub fn member_id(mut self, member_id: impl ToString) -> Self {
59 self.request.member_id = member_id.to_string();
60 self
61 }
62
63 pub fn member_type(mut self, member_type: impl ToString) -> Self {
65 self.request.member_type = Some(member_type.to_string());
66 self
67 }
68
69 pub fn build(mut self) -> DeleteSpaceMemberRequest {
70 if let Some(member_type) = &self.request.member_type {
71 self.request
72 .api_request
73 .query_params
74 .insert("member_type", member_type.clone());
75 }
76 self.request
77 }
78}
79
80#[derive(Debug, Deserialize)]
82pub struct DeleteSpaceMemberResponse {
83 pub member_id: String,
85 pub deleted: bool,
87}
88
89impl ApiResponseTrait for DeleteSpaceMemberResponse {
90 fn data_format() -> ResponseFormat {
91 ResponseFormat::Data
92 }
93}
94
95pub async fn delete_space_member(
97 request: DeleteSpaceMemberRequest,
98 config: &Config,
99 option: Option<RequestOption>,
100) -> SDKResult<BaseResponse<DeleteSpaceMemberResponse>> {
101 let mut api_req = request.api_request;
102 api_req.http_method = Method::DELETE;
103 api_req.api_path = {
104 let mut path = EndpointBuilder::replace_param(
105 WIKI_V2_SPACE_MEMBER_DELETE,
106 "space_id",
107 &request.space_id,
108 );
109 path = EndpointBuilder::replace_param(&path, "member_id", &request.member_id);
110 path
111 };
112 api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
113
114 let api_resp = Transport::request(api_req, config, option).await?;
115 Ok(api_resp)
116}
117
118#[cfg(test)]
119#[allow(unused_variables, unused_unsafe)]
120mod tests {
121 use super::*;
122
123 #[test]
124 fn test_delete_space_member_request_builder() {
125 let request = DeleteSpaceMemberRequest::builder()
126 .space_id("spcxxxxxx")
127 .member_id("ou_xxxxxx")
128 .member_type("user")
129 .build();
130
131 assert_eq!(request.space_id, "spcxxxxxx");
132 assert_eq!(request.member_id, "ou_xxxxxx");
133 assert_eq!(request.member_type, Some("user".to_string()));
134 }
135}