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

1use reqwest::Method;
2use serde::Deserialize;
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    impl_executable_builder_owned,
15};
16
17use super::AppTableViewService;
18
19impl AppTableViewService {
20    /// 获取视图
21    pub async fn get(
22        &self,
23        request: GetViewRequest,
24        option: Option<RequestOption>,
25    ) -> SDKResult<BaseResponse<GetViewResponse>> {
26        let mut api_req = request.api_request;
27        api_req.http_method = Method::GET;
28        api_req.api_path = BITABLE_V1_VIEW_GET
29            .replace("{app_token}", &request.app_token)
30            .replace("{table_id}", &request.table_id)
31            .replace("{view_id}", &request.view_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        Ok(api_resp)
36    }
37}
38
39/// 获取视图请求
40#[derive(Debug, Default)]
41pub struct GetViewRequest {
42    api_request: ApiRequest,
43    /// 多维表格的 app_token
44    app_token: String,
45    /// 数据表的 table_id
46    table_id: String,
47    /// 视图的 view_id
48    view_id: String,
49}
50
51impl GetViewRequest {
52    pub fn builder() -> GetViewRequestBuilder {
53        GetViewRequestBuilder::default()
54    }
55
56    /// 创建获取视图请求
57    pub fn new(app_token: impl ToString, table_id: impl ToString, view_id: impl ToString) -> Self {
58        Self {
59            api_request: ApiRequest::default(),
60            app_token: app_token.to_string(),
61            table_id: table_id.to_string(),
62            view_id: view_id.to_string(),
63        }
64    }
65}
66
67#[derive(Default)]
68pub struct GetViewRequestBuilder {
69    request: GetViewRequest,
70}
71
72impl GetViewRequestBuilder {
73    /// 多维表格的 app_token
74    pub fn app_token(mut self, app_token: impl ToString) -> Self {
75        self.request.app_token = app_token.to_string();
76        self
77    }
78
79    /// 数据表的 table_id
80    pub fn table_id(mut self, table_id: impl ToString) -> Self {
81        self.request.table_id = table_id.to_string();
82        self
83    }
84
85    /// 视图的 view_id
86    pub fn view_id(mut self, view_id: impl ToString) -> Self {
87        self.request.view_id = view_id.to_string();
88        self
89    }
90
91    pub fn build(self) -> GetViewRequest {
92        self.request
93    }
94}
95
96impl_executable_builder_owned!(
97    GetViewRequestBuilder,
98    AppTableViewService,
99    GetViewRequest,
100    BaseResponse<GetViewResponse>,
101    get
102);
103
104#[derive(Deserialize, Debug)]
105pub struct GetViewResponse {
106    /// 视图信息
107    pub view: ViewDetailInfo,
108}
109
110#[derive(Deserialize, Debug)]
111pub struct ViewDetailInfo {
112    /// 视图 ID
113    pub view_id: String,
114    /// 视图名称
115    pub view_name: String,
116    /// 视图类型
117    pub view_type: String,
118    /// 视图的自定义属性
119    #[serde(default)]
120    pub property: Option<serde_json::Value>,
121}
122
123impl ApiResponseTrait for GetViewResponse {
124    fn data_format() -> ResponseFormat {
125        ResponseFormat::Data
126    }
127}
128
129#[cfg(test)]
130#[allow(unused_variables, unused_unsafe)]
131mod tests {
132    use super::*;
133
134    #[test]
135    fn test_get_view_request() {
136        let request = GetViewRequest::builder()
137            .app_token("bascnmBA*****yGehy8")
138            .table_id("tblsRc9GRRXKqhvW")
139            .view_id("vewTpR1urY")
140            .build();
141
142        assert_eq!(request.app_token, "bascnmBA*****yGehy8");
143        assert_eq!(request.table_id, "tblsRc9GRRXKqhvW");
144        assert_eq!(request.view_id, "vewTpR1urY");
145    }
146
147    #[test]
148    fn test_get_view_request_new() {
149        let request = GetViewRequest::new("bascnmBA*****yGehy8", "tblsRc9GRRXKqhvW", "vewTpR1urY");
150
151        assert_eq!(request.app_token, "bascnmBA*****yGehy8");
152        assert_eq!(request.table_id, "tblsRc9GRRXKqhvW");
153        assert_eq!(request.view_id, "vewTpR1urY");
154    }
155}