open_lark/service/cloud_docs/sheets/v3/data_validation/
update.rs

1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5    core::{
6        api_req::ApiRequest,
7        api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
8        constants::AccessTokenType,
9        endpoints::cloud_docs::*,
10        http::Transport,
11        req_option::RequestOption,
12        SDKResult,
13    },
14    service::sheets::v3::SpreadsheetSheetService,
15};
16
17use super::create::DataValidationRule;
18
19impl SpreadsheetSheetService {
20    /// 更新下拉列表设置
21    pub async fn update_data_validation(
22        &self,
23        request: UpdateDataValidationRequest,
24        option: Option<RequestOption>,
25    ) -> SDKResult<BaseResponse<UpdateDataValidationResponseData>> {
26        let mut api_req = request.api_request;
27        api_req.http_method = Method::PUT;
28        api_req.api_path = SHEETS_V3_SPREADSHEET_DATA_VALIDATION_GET
29            .replace("{}", &request.spreadsheet_token)
30            .replace("{}", &request.sheet_id)
31            .replace("{}", &request.data_validation_id);
32        api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
33
34        let api_resp = Transport::request(api_req, &self.config, option).await?;
35
36        Ok(api_resp)
37    }
38}
39
40/// 更新下拉列表设置请求
41#[derive(Default, Debug, Serialize, Deserialize)]
42pub struct UpdateDataValidationRequest {
43    #[serde(skip)]
44    api_request: ApiRequest,
45    /// spreadsheet 的 token
46    spreadsheet_token: String,
47    /// sheet 的 id
48    sheet_id: String,
49    /// 数据校验 ID
50    data_validation_id: String,
51    /// 新的数据校验设置
52    data_validation: DataValidationRule,
53}
54
55impl UpdateDataValidationRequest {
56    pub fn builder() -> UpdateDataValidationRequestBuilder {
57        UpdateDataValidationRequestBuilder::default()
58    }
59}
60
61#[derive(Default)]
62pub struct UpdateDataValidationRequestBuilder {
63    request: UpdateDataValidationRequest,
64}
65
66impl UpdateDataValidationRequestBuilder {
67    pub fn spreadsheet_token(mut self, spreadsheet_token: impl ToString) -> Self {
68        self.request.spreadsheet_token = spreadsheet_token.to_string();
69        self
70    }
71
72    pub fn sheet_id(mut self, sheet_id: impl ToString) -> Self {
73        self.request.sheet_id = sheet_id.to_string();
74        self
75    }
76
77    pub fn data_validation_id(mut self, data_validation_id: impl ToString) -> Self {
78        self.request.data_validation_id = data_validation_id.to_string();
79        self
80    }
81
82    pub fn data_validation(mut self, data_validation: DataValidationRule) -> Self {
83        self.request.data_validation = data_validation;
84        self
85    }
86
87    pub fn build(mut self) -> UpdateDataValidationRequest {
88        self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
89        self.request
90    }
91}
92
93/// 更新下拉列表设置响应体最外层
94#[derive(Deserialize, Debug)]
95pub struct UpdateDataValidationResponseData {
96    /// 数据校验 ID
97    pub data_validation_id: String,
98    /// 更新后的数据校验规则信息
99    #[serde(flatten)]
100    pub data_validation: DataValidationRule,
101}
102
103impl ApiResponseTrait for UpdateDataValidationResponseData {
104    fn data_format() -> ResponseFormat {
105        ResponseFormat::Data
106    }
107}
108
109#[cfg(test)]
110#[allow(unused_variables, unused_unsafe)]
111mod test {
112    use super::*;
113    use serde_json::json;
114
115    #[test]
116    fn test_update_data_validation_response() {
117        let json = json!({
118            "data_validation_id": "dv_001",
119            "condition_type": "number_between",
120            "range": "B1:B10",
121            "condition_values": ["1", "100"],
122            "strict": true,
123            "input_message": "请输入1-100之间的数字",
124            "error_message": "数字超出范围"
125        });
126
127        let response: UpdateDataValidationResponseData = serde_json::from_value(json).unwrap();
128        assert_eq!(response.data_validation_id, "dv_001");
129        assert_eq!(response.data_validation.condition_type, "number_between");
130    }
131}