open_lark/service/cloud_docs/sheets/v2/data_operation/
merge_cells.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, SDKResult,
9    },
10    service::sheets::v2::SpreadsheetService,
11};
12
13/// 合并单元格请求
14#[derive(Serialize, Debug, Default)]
15pub struct MergeCellsRequest {
16    #[serde(skip)]
17    api_request: ApiRequest,
18    #[serde(skip)]
19    spreadsheet_token: String,
20    /// 查询范围,包含 sheetId 与单元格范围两部分,目前支持四种索引方式,详见 在线表格开发指南
21    range: String,
22    /// 可选三个类型,"MERGE_ALL" 将所选区域直接合并、"MERGE_ROWS"
23    /// 将所选区域按行合并、"MERGE_COLUMNS" 将所选区域按列合并响应
24    #[serde(rename = "mergeType")]
25    merge_type: String,
26}
27
28impl MergeCellsRequest {
29    pub fn builder() -> MergeCellsRequestBuilder {
30        MergeCellsRequestBuilder::default()
31    }
32}
33
34#[derive(Default)]
35pub struct MergeCellsRequestBuilder {
36    request: MergeCellsRequest,
37}
38
39impl MergeCellsRequestBuilder {
40    pub fn spreadsheet_token(mut self, spreadsheet_token: impl ToString) -> Self {
41        self.request.spreadsheet_token = spreadsheet_token.to_string();
42        self
43    }
44
45    /// 查询范围,包含 sheetId 与单元格范围两部分,目前支持四种索引方式,详见 在线表格开发指南
46    pub fn range(mut self, range: impl ToString) -> Self {
47        self.request.range = range.to_string();
48        self
49    }
50
51    /// 可选三个类型,"MERGE_ALL" 将所选区域直接合并、"MERGE_ROWS"
52    /// 将所选区域按行合并、"MERGE_COLUMNS" 将所选区域按列合并响应
53    pub fn merge_type(mut self, merge_type: impl ToString) -> Self {
54        self.request.merge_type = merge_type.to_string();
55        self
56    }
57
58    pub fn build(mut self) -> MergeCellsRequest {
59        self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
60        self.request
61    }
62}
63
64#[derive(Deserialize, Debug)]
65pub struct MergeCellsResponse {
66    /// spreadsheet 的 token
67    #[serde(rename = "spreadsheetToken")]
68    pub spread_sheet_token: String,
69}
70
71impl ApiResponseTrait for MergeCellsResponse {
72    fn data_format() -> ResponseFormat {
73        ResponseFormat::Data
74    }
75}
76
77impl SpreadsheetService {
78    /// 合并单元格
79    pub async fn merge_cells(
80        &self,
81        request: MergeCellsRequest,
82        option: Option<req_option::RequestOption>,
83    ) -> SDKResult<BaseResponse<MergeCellsResponse>> {
84        let mut api_req = request.api_request;
85        api_req.api_path = format!(
86            "/open-apis/sheets/v2/spreadsheets/{spreadsheet_token}/merge_cells",
87            spreadsheet_token = request.spreadsheet_token
88        );
89        api_req.http_method = reqwest::Method::POST;
90        api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::App];
91
92        let api_resp = crate::core::http::Transport::request(api_req, &self.config, option).await?;
93
94        Ok(api_resp)
95    }
96}