open_lark/service/cloud_docs/wiki/v2/space_setting/
update.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 UpdateSpaceSettingRequest {
18    #[serde(skip)]
19    api_request: ApiRequest,
20    /// 知识空间id
21    #[serde(skip)]
22    space_id: String,
23    /// 是否开启评论:true(开启)、false(关闭)
24    #[serde(skip_serializing_if = "Option::is_none")]
25    comment_enabled: Option<bool>,
26    /// 是否开启复制:true(开启)、false(关闭)
27    #[serde(skip_serializing_if = "Option::is_none")]
28    copy_enabled: Option<bool>,
29}
30
31impl UpdateSpaceSettingRequest {
32    pub fn builder() -> UpdateSpaceSettingRequestBuilder {
33        UpdateSpaceSettingRequestBuilder::default()
34    }
35
36    pub fn new(space_id: impl ToString) -> Self {
37        Self {
38            space_id: space_id.to_string(),
39            ..Default::default()
40        }
41    }
42}
43
44#[derive(Default)]
45pub struct UpdateSpaceSettingRequestBuilder {
46    request: UpdateSpaceSettingRequest,
47}
48
49impl UpdateSpaceSettingRequestBuilder {
50    /// 知识空间id
51    pub fn space_id(mut self, space_id: impl ToString) -> Self {
52        self.request.space_id = space_id.to_string();
53        self
54    }
55
56    /// 是否开启评论
57    pub fn comment_enabled(mut self, enabled: bool) -> Self {
58        self.request.comment_enabled = Some(enabled);
59        self
60    }
61
62    /// 开启评论
63    pub fn enable_comment(mut self) -> Self {
64        self.request.comment_enabled = Some(true);
65        self
66    }
67
68    /// 关闭评论
69    pub fn disable_comment(mut self) -> Self {
70        self.request.comment_enabled = Some(false);
71        self
72    }
73
74    /// 是否开启复制
75    pub fn copy_enabled(mut self, enabled: bool) -> Self {
76        self.request.copy_enabled = Some(enabled);
77        self
78    }
79
80    /// 开启复制
81    pub fn enable_copy(mut self) -> Self {
82        self.request.copy_enabled = Some(true);
83        self
84    }
85
86    /// 关闭复制
87    pub fn disable_copy(mut self) -> Self {
88        self.request.copy_enabled = Some(false);
89        self
90    }
91
92    pub fn build(mut self) -> UpdateSpaceSettingRequest {
93        self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
94        self.request
95    }
96}
97
98/// 知识空间设置
99#[derive(Debug, Deserialize)]
100pub struct SpaceSetting {
101    /// 知识空间id
102    pub space_id: String,
103    /// 是否开启评论
104    pub comment_enabled: Option<bool>,
105    /// 是否开启复制
106    pub copy_enabled: Option<bool>,
107}
108
109/// 更新知识空间设置响应
110#[derive(Debug, Deserialize)]
111pub struct UpdateSpaceSettingResponse {
112    /// 更新后的空间设置
113    pub setting: SpaceSetting,
114}
115
116impl ApiResponseTrait for UpdateSpaceSettingResponse {
117    fn data_format() -> ResponseFormat {
118        ResponseFormat::Data
119    }
120}
121
122/// 更新知识空间设置
123pub async fn update_space_setting(
124    request: UpdateSpaceSettingRequest,
125    config: &Config,
126    option: Option<RequestOption>,
127) -> SDKResult<BaseResponse<UpdateSpaceSettingResponse>> {
128    let mut api_req = request.api_request;
129    api_req.http_method = Method::PUT;
130    api_req.api_path =
131        EndpointBuilder::replace_param(WIKI_V2_SPACE_SETTING_UPDATE, "space_id", &request.space_id);
132    api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
133
134    let api_resp = Transport::request(api_req, config, option).await?;
135    Ok(api_resp)
136}
137
138#[cfg(test)]
139#[allow(unused_variables, unused_unsafe)]
140mod tests {
141    use super::*;
142
143    #[test]
144    fn test_update_space_setting_request_builder() {
145        let request = UpdateSpaceSettingRequest::builder()
146            .space_id("spcxxxxxx")
147            .enable_comment()
148            .disable_copy()
149            .build();
150
151        assert_eq!(request.space_id, "spcxxxxxx");
152        assert_eq!(request.comment_enabled, Some(true));
153        assert_eq!(request.copy_enabled, Some(false));
154    }
155}