open_lark/service/cloud_docs/sheets/v3/float_image/
patch.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
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 service::sheets::v3::SpreadsheetSheetService,
16};
17
18use super::create::FloatImageData;
19
20impl SpreadsheetSheetService {
21 pub async fn update_float_image(
23 &self,
24 request: UpdateFloatImageRequest,
25 option: Option<RequestOption>,
26 ) -> SDKResult<BaseResponse<UpdateFloatImageResponseData>> {
27 let mut api_req = request.api_request;
28 api_req.http_method = Method::PATCH;
29 api_req.api_path = SHEETS_V3_SPREADSHEET_FLOAT_IMAGE_GET
30 .replace("{}", &request.spreadsheet_token)
31 .replace("{}", &request.sheet_id)
32 .replace("{}", &request.float_image_id);
33 api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
34
35 let api_resp = Transport::request(api_req, &self.config, option).await?;
36
37 Ok(api_resp)
38 }
39}
40
41#[derive(Default, Debug, Serialize, Deserialize)]
43pub struct UpdateFloatImageRequest {
44 #[serde(skip)]
45 api_request: ApiRequest,
46 spreadsheet_token: String,
48 sheet_id: String,
50 float_image_id: String,
52 float_image: FloatImageData,
54}
55
56impl UpdateFloatImageRequest {
57 pub fn builder() -> UpdateFloatImageRequestBuilder {
58 UpdateFloatImageRequestBuilder::default()
59 }
60}
61
62#[derive(Default)]
63pub struct UpdateFloatImageRequestBuilder {
64 request: UpdateFloatImageRequest,
65}
66
67impl UpdateFloatImageRequestBuilder {
68 pub fn spreadsheet_token(mut self, spreadsheet_token: impl ToString) -> Self {
69 self.request.spreadsheet_token = spreadsheet_token.to_string();
70 self
71 }
72
73 pub fn sheet_id(mut self, sheet_id: impl ToString) -> Self {
74 self.request.sheet_id = sheet_id.to_string();
75 self
76 }
77
78 pub fn float_image_id(mut self, float_image_id: impl ToString) -> Self {
79 self.request.float_image_id = float_image_id.to_string();
80 self
81 }
82
83 pub fn float_image(mut self, float_image: FloatImageData) -> Self {
84 self.request.float_image = float_image;
85 self
86 }
87
88 pub fn build(mut self) -> UpdateFloatImageRequest {
89 self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
90 self.request
91 }
92}
93
94impl_executable_builder_owned!(
95 UpdateFloatImageRequestBuilder,
96 SpreadsheetSheetService,
97 UpdateFloatImageRequest,
98 BaseResponse<UpdateFloatImageResponseData>,
99 update_float_image
100);
101
102#[derive(Deserialize, Debug)]
104pub struct UpdateFloatImageResponseData {
105 pub float_image_id: String,
107 #[serde(flatten)]
109 pub float_image: FloatImageData,
110}
111
112impl ApiResponseTrait for UpdateFloatImageResponseData {
113 fn data_format() -> ResponseFormat {
114 ResponseFormat::Data
115 }
116}
117
118#[cfg(test)]
119#[allow(unused_variables, unused_unsafe)]
120mod test {
121 use super::*;
122 use serde_json::json;
123
124 #[test]
125 fn test_update_float_image_response() {
126 let json = json!({
127 "float_image_id": "fimg_001",
128 "image_token": "img_token_456",
129 "position": {
130 "start_col_index": 2,
131 "start_row_index": 2,
132 "offset_x": 15.0,
133 "offset_y": 25.0
134 },
135 "size": {
136 "width": 300.0,
137 "height": 200.0
138 },
139 "name": "更新后的图片"
140 });
141
142 let response: UpdateFloatImageResponseData = serde_json::from_value(json).unwrap();
143 assert_eq!(response.float_image_id, "fimg_001");
144 assert_eq!(response.float_image.image_token, "img_token_456");
145 assert_eq!(response.float_image.size.width, 300.0);
146 }
147}