open_lark/service/cloud_docs/wiki/v2/space_setting/
update.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 UpdateSpaceSettingRequest {
18 #[serde(skip)]
19 api_request: ApiRequest,
20 #[serde(skip)]
22 space_id: String,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 comment_enabled: Option<bool>,
26 #[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 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 pub fn comment_enabled(mut self, enabled: bool) -> Self {
58 self.request.comment_enabled = Some(enabled);
59 self
60 }
61
62 pub fn enable_comment(mut self) -> Self {
64 self.request.comment_enabled = Some(true);
65 self
66 }
67
68 pub fn disable_comment(mut self) -> Self {
70 self.request.comment_enabled = Some(false);
71 self
72 }
73
74 pub fn copy_enabled(mut self, enabled: bool) -> Self {
76 self.request.copy_enabled = Some(enabled);
77 self
78 }
79
80 pub fn enable_copy(mut self) -> Self {
82 self.request.copy_enabled = Some(true);
83 self
84 }
85
86 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#[derive(Debug, Deserialize)]
100pub struct SpaceSetting {
101 pub space_id: String,
103 pub comment_enabled: Option<bool>,
105 pub copy_enabled: Option<bool>,
107}
108
109#[derive(Debug, Deserialize)]
111pub struct UpdateSpaceSettingResponse {
112 pub setting: SpaceSetting,
114}
115
116impl ApiResponseTrait for UpdateSpaceSettingResponse {
117 fn data_format() -> ResponseFormat {
118 ResponseFormat::Data
119 }
120}
121
122pub 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}