open_lark/service/cloud_docs/bitable/v1/app/
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        http::Transport,
10        req_option::RequestOption,
11        SDKResult,
12    },
13    impl_executable_builder_owned,
14};
15
16use super::AppService;
17
18impl AppService {
19    /// 获取多维表格元数据
20    ///
21    /// <https://open.feishu.cn/document/server-docs/docs/bitable-v1/app/get>
22    pub async fn get(
23        &self,
24        request: GetAppRequest,
25        option: Option<RequestOption>,
26    ) -> SDKResult<BaseResponse<GetAppResponse>> {
27        let mut api_req = request.api_request;
28        api_req.http_method = Method::GET;
29        api_req.api_path = format!("/open-apis/bitable/v1/apps/{}", request.app_token);
30        api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
31
32        let api_resp = Transport::request(api_req, &self.config, option).await?;
33        Ok(api_resp)
34    }
35}
36
37/// 获取多维表格元数据请求
38#[derive(Debug, Default)]
39pub struct GetAppRequest {
40    api_request: ApiRequest,
41    /// 多维表格的唯一标识符
42    app_token: String,
43}
44
45impl GetAppRequest {
46    pub fn builder() -> GetAppRequestBuilder {
47        GetAppRequestBuilder::default()
48    }
49
50    /// 创建获取多维表格元数据请求
51    pub fn new(app_token: impl ToString) -> Self {
52        Self {
53            api_request: ApiRequest::default(),
54            app_token: app_token.to_string(),
55        }
56    }
57}
58
59#[derive(Default)]
60pub struct GetAppRequestBuilder {
61    request: GetAppRequest,
62}
63
64impl GetAppRequestBuilder {
65    /// 多维表格的唯一标识符
66    pub fn app_token(mut self, app_token: impl ToString) -> Self {
67        self.request.app_token = app_token.to_string();
68        self
69    }
70
71    pub fn build(self) -> GetAppRequest {
72        self.request
73    }
74}
75
76impl_executable_builder_owned!(
77    GetAppRequestBuilder,
78    AppService,
79    GetAppRequest,
80    BaseResponse<GetAppResponse>,
81    get
82);
83
84#[derive(Deserialize, Debug)]
85pub struct GetAppResponse {
86    /// 多维表格的 app 信息
87    pub app: GetAppResponseData,
88}
89
90#[derive(Deserialize, Debug)]
91pub struct GetAppResponseData {
92    /// 多维表格的 app_token
93    pub app_token: String,
94    /// 多维表格的名字
95    pub name: String,
96    /// 多维表格的版本号(对多维表格进行修改时更新,如新增、删除数据表,修改数据表名等,初始为1,
97    /// 每次更新+1)
98    pub revision: i32,
99    /// 多维表格是否开启了高级权限。取值包括:
100    ///
101    /// - true:表示开启了高级权限
102    /// - false:表示关闭了高级权限
103    pub is_advanced: bool,
104    /// 文档时区
105    pub time_zone: String,
106}
107
108impl ApiResponseTrait for GetAppResponse {
109    fn data_format() -> ResponseFormat {
110        ResponseFormat::Data
111    }
112}
113
114#[cfg(test)]
115mod tests {
116    use super::*;
117
118    #[test]
119    fn test_get_app_request() {
120        let request = GetAppRequest::builder()
121            .app_token("bascnmBA*****yGehy8")
122            .build();
123
124        assert_eq!(request.app_token, "bascnmBA*****yGehy8");
125    }
126
127    #[test]
128    fn test_get_app_request_new() {
129        let request = GetAppRequest::new("bascnmBA*****yGehy8");
130        assert_eq!(request.app_token, "bascnmBA*****yGehy8");
131    }
132}