open_lark/service/cloud_docs/wiki/v2/space_member/
delete.rs

1use 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/// 删除知识空间成员请求
16#[derive(Debug, Serialize, Default)]
17pub struct DeleteSpaceMemberRequest {
18    #[serde(skip)]
19    api_request: ApiRequest,
20    /// 知识空间id
21    #[serde(skip)]
22    space_id: String,
23    /// 成员id
24    #[serde(skip)]
25    member_id: String,
26    /// 成员类型:user
27    #[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    /// 知识空间id
52    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    /// 成员id
58    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    /// 成员类型:user
64    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/// 删除知识空间成员响应
81#[derive(Debug, Deserialize)]
82pub struct DeleteSpaceMemberResponse {
83    /// 删除的成员id
84    pub member_id: String,
85    /// 是否删除成功
86    pub deleted: bool,
87}
88
89impl ApiResponseTrait for DeleteSpaceMemberResponse {
90    fn data_format() -> ResponseFormat {
91        ResponseFormat::Data
92    }
93}
94
95/// 删除知识空间成员
96pub 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}