open_lark/service/cloud_docs/sheets/v3/data_validation/
delete.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        http::Transport,
10        req_option::RequestOption,
11        SDKResult,
12    },
13    service::sheets::v3::SpreadsheetSheetService,
14};
15
16impl SpreadsheetSheetService {
17    /// 删除下拉列表设置
18    pub async fn delete_data_validation(
19        &self,
20        request: DeleteDataValidationRequest,
21        option: Option<RequestOption>,
22    ) -> SDKResult<BaseResponse<DeleteDataValidationResponseData>> {
23        let mut api_req = request.api_request;
24        api_req.http_method = Method::DELETE;
25        api_req.api_path = format!(
26            "/open-apis/sheets/v3/spreadsheets/{}/sheets/{}/dataValidation/{}",
27            request.spreadsheet_token, request.sheet_id, request.data_validation_id
28        );
29        api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
30
31        let api_resp = Transport::request(api_req, &self.config, option).await?;
32
33        Ok(api_resp)
34    }
35}
36
37/// 删除下拉列表设置请求
38#[derive(Default, Debug, Serialize, Deserialize)]
39pub struct DeleteDataValidationRequest {
40    #[serde(skip)]
41    api_request: ApiRequest,
42    /// spreadsheet 的 token
43    spreadsheet_token: String,
44    /// sheet 的 id
45    sheet_id: String,
46    /// 数据校验 ID
47    data_validation_id: String,
48}
49
50impl DeleteDataValidationRequest {
51    pub fn builder() -> DeleteDataValidationRequestBuilder {
52        DeleteDataValidationRequestBuilder::default()
53    }
54}
55
56#[derive(Default)]
57pub struct DeleteDataValidationRequestBuilder {
58    request: DeleteDataValidationRequest,
59}
60
61impl DeleteDataValidationRequestBuilder {
62    pub fn spreadsheet_token(mut self, spreadsheet_token: impl ToString) -> Self {
63        self.request.spreadsheet_token = spreadsheet_token.to_string();
64        self
65    }
66
67    pub fn sheet_id(mut self, sheet_id: impl ToString) -> Self {
68        self.request.sheet_id = sheet_id.to_string();
69        self
70    }
71
72    pub fn data_validation_id(mut self, data_validation_id: impl ToString) -> Self {
73        self.request.data_validation_id = data_validation_id.to_string();
74        self
75    }
76
77    pub fn build(mut self) -> DeleteDataValidationRequest {
78        self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
79        self.request
80    }
81}
82
83/// 删除下拉列表设置响应体最外层
84#[derive(Deserialize, Debug)]
85pub struct DeleteDataValidationResponseData {
86    /// 删除操作是否成功
87    #[serde(default)]
88    pub success: bool,
89    /// 删除的数据校验 ID
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub data_validation_id: Option<String>,
92}
93
94impl ApiResponseTrait for DeleteDataValidationResponseData {
95    fn data_format() -> ResponseFormat {
96        ResponseFormat::Data
97    }
98}
99
100#[cfg(test)]
101mod test {
102    use super::*;
103    use serde_json::json;
104
105    #[test]
106    fn test_delete_data_validation_response() {
107        let json = json!({
108            "success": true,
109            "data_validation_id": "dv_001"
110        });
111
112        let response: DeleteDataValidationResponseData = serde_json::from_value(json).unwrap();
113        assert!(response.success);
114        assert_eq!(response.data_validation_id, Some("dv_001".to_string()));
115    }
116}