open_lark/service/cloud_docs/sheets/v3/data_validation/
update.rs1use 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 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#[derive(Default, Debug, Serialize, Deserialize)]
42pub struct UpdateDataValidationRequest {
43 #[serde(skip)]
44 api_request: ApiRequest,
45 spreadsheet_token: String,
47 sheet_id: String,
49 data_validation_id: String,
51 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#[derive(Deserialize, Debug)]
95pub struct UpdateDataValidationResponseData {
96 pub data_validation_id: String,
98 #[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}