open_lark/service/cloud_docs/bitable/v1/app_table_view/
delete.rs

1use reqwest::Method;
2use serde::Deserialize;
3
4use crate::{
5    core::{
6        api_req::ApiRequest,
7        api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
8        config::Config,
9        constants::AccessTokenType,
10        endpoints::cloud_docs::*,
11        http::Transport,
12        req_option::RequestOption,
13        SDKResult,
14    },
15    impl_executable_builder_config,
16};
17
18use super::AppTableViewService;
19
20impl AppTableViewService {
21    /// 删除视图
22    pub async fn delete(
23        &self,
24        request: DeleteViewRequest,
25        option: Option<RequestOption>,
26    ) -> SDKResult<BaseResponse<DeleteViewResponse>> {
27        delete_view(request, &self.config, option).await
28    }
29}
30
31/// 删除视图
32pub async fn delete_view(
33    request: DeleteViewRequest,
34    config: &Config,
35    option: Option<RequestOption>,
36) -> SDKResult<BaseResponse<DeleteViewResponse>> {
37    let mut api_req = request.api_request;
38    api_req.http_method = Method::DELETE;
39    api_req.api_path = BITABLE_V1_VIEW_DELETE
40        .replace("{app_token}", &request.app_token)
41        .replace("{table_id}", &request.table_id)
42        .replace("{view_id}", &request.view_id);
43    api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
44
45    let api_resp = Transport::request(api_req, config, option).await?;
46    Ok(api_resp)
47}
48
49/// 删除视图请求
50#[derive(Debug, Default)]
51pub struct DeleteViewRequest {
52    api_request: ApiRequest,
53    /// 多维表格的 app_token
54    app_token: String,
55    /// 数据表的 table_id
56    table_id: String,
57    /// 视图的 view_id
58    view_id: String,
59}
60
61impl DeleteViewRequest {
62    pub fn builder() -> DeleteViewRequestBuilder {
63        DeleteViewRequestBuilder::default()
64    }
65
66    /// 创建删除视图请求
67    pub fn new(app_token: impl ToString, table_id: impl ToString, view_id: impl ToString) -> Self {
68        Self {
69            api_request: ApiRequest::default(),
70            app_token: app_token.to_string(),
71            table_id: table_id.to_string(),
72            view_id: view_id.to_string(),
73        }
74    }
75}
76
77#[derive(Default)]
78pub struct DeleteViewRequestBuilder {
79    request: DeleteViewRequest,
80}
81
82impl DeleteViewRequestBuilder {
83    /// 多维表格的 app_token
84    pub fn app_token(mut self, app_token: impl ToString) -> Self {
85        self.request.app_token = app_token.to_string();
86        self
87    }
88
89    /// 数据表的 table_id
90    pub fn table_id(mut self, table_id: impl ToString) -> Self {
91        self.request.table_id = table_id.to_string();
92        self
93    }
94
95    /// 视图的 view_id
96    pub fn view_id(mut self, view_id: impl ToString) -> Self {
97        self.request.view_id = view_id.to_string();
98        self
99    }
100
101    pub fn build(self) -> DeleteViewRequest {
102        self.request
103    }
104}
105
106impl_executable_builder_config!(
107    DeleteViewRequestBuilder,
108    DeleteViewRequest,
109    BaseResponse<DeleteViewResponse>,
110    delete_view
111);
112
113#[derive(Deserialize, Debug)]
114pub struct DeleteViewResponse {
115    /// 删除结果
116    pub deleted: bool,
117}
118
119impl ApiResponseTrait for DeleteViewResponse {
120    fn data_format() -> ResponseFormat {
121        ResponseFormat::Data
122    }
123}
124
125#[cfg(test)]
126#[allow(unused_variables, unused_unsafe)]
127mod tests {
128    use super::*;
129
130    #[test]
131    fn test_delete_view_request() {
132        let request = DeleteViewRequest::builder()
133            .app_token("bascnmBA*****yGehy8")
134            .table_id("tblsRc9GRRXKqhvW")
135            .view_id("vewTpR1urY")
136            .build();
137
138        assert_eq!(request.app_token, "bascnmBA*****yGehy8");
139        assert_eq!(request.table_id, "tblsRc9GRRXKqhvW");
140        assert_eq!(request.view_id, "vewTpR1urY");
141    }
142
143    #[test]
144    fn test_delete_view_request_new() {
145        let request =
146            DeleteViewRequest::new("bascnmBA*****yGehy8", "tblsRc9GRRXKqhvW", "vewTpR1urY");
147
148        assert_eq!(request.app_token, "bascnmBA*****yGehy8");
149        assert_eq!(request.table_id, "tblsRc9GRRXKqhvW");
150        assert_eq!(request.view_id, "vewTpR1urY");
151    }
152}