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