open_lark/service/cloud_docs/sheets/v3/spreadsheet_sheet/
query.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{
4    core::{
5        api_req::ApiRequest,
6        api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
7        constants::AccessTokenType,
8        endpoints::cloud_docs::*,
9        req_option::RequestOption,
10        SDKResult,
11    },
12    service::sheets::v3::{spreadsheet_sheet::Sheet, SpreadsheetSheetService},
13};
14
15/// 获取工作表请求
16#[derive(Serialize, Deserialize, Debug, Default)]
17pub struct QuerySpreadsheetSheetRequest {
18    #[serde(skip)]
19    api_request: ApiRequest,
20    #[serde(skip)]
21    spreadsheet_token: String,
22}
23
24impl SpreadsheetSheetService {
25    /// 获取工作表
26    /// 根据电子表格 token 获取表格中所有工作表及其属性信息,包括工作表
27    /// ID、标题、索引位置、是否被隐藏等。
28    pub async fn query(
29        &self,
30        request: QuerySpreadsheetSheetRequest,
31        option: Option<RequestOption>,
32    ) -> SDKResult<BaseResponse<QuerySpreadsheetSheetResponse>> {
33        let mut api_req = request.api_request;
34        api_req.api_path =
35            SHEETS_V3_SPREADSHEET_SHEETS_QUERY.replace("{}", &request.spreadsheet_token);
36        api_req.http_method = reqwest::Method::GET;
37        api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
38
39        let api_resp = crate::core::http::Transport::request(api_req, &self.config, option).await?;
40
41        Ok(api_resp)
42    }
43}
44
45impl QuerySpreadsheetSheetRequest {
46    pub fn builder() -> QuerySpreadsheetSheetRequestBuilder {
47        QuerySpreadsheetSheetRequestBuilder::default()
48    }
49}
50
51#[derive(Default)]
52pub struct QuerySpreadsheetSheetRequestBuilder {
53    request: QuerySpreadsheetSheetRequest,
54}
55
56impl QuerySpreadsheetSheetRequestBuilder {
57    /// 表格的token
58    pub fn spreadsheet_token(mut self, spreadsheet_token: impl ToString) -> Self {
59        self.request.spreadsheet_token = spreadsheet_token.to_string();
60        self
61    }
62
63    pub fn build(mut self) -> QuerySpreadsheetSheetRequest {
64        self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
65        self.request
66    }
67}
68
69#[derive(Deserialize, Debug)]
70pub struct QuerySpreadsheetSheetResponse {
71    pub sheets: Vec<Sheet>,
72}
73
74impl ApiResponseTrait for QuerySpreadsheetSheetResponse {
75    fn data_format() -> ResponseFormat {
76        ResponseFormat::Data
77    }
78}