open_lark/service/search/v2/data_item/
mod.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5 core::{
6 api_req::ApiRequest,
7 api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
8 config::Config,
9 constants::AccessTokenType,
10 endpoints::EndpointBuilder,
11 http::Transport,
12 req_option::RequestOption,
13 SDKResult,
14 },
15 service::search::v2::models::{BatchCreateDataItemRequest, CreateDataItemRequest, DataItem},
16};
17
18pub struct DataItemService {
20 pub config: Config,
21}
22
23#[derive(Debug, Serialize, Deserialize)]
25pub struct CreateDataItemResponse {
26 pub data_item: DataItem,
28}
29
30impl ApiResponseTrait for CreateDataItemResponse {
31 fn data_format() -> ResponseFormat {
32 ResponseFormat::Data
33 }
34}
35
36#[derive(Debug, Serialize, Deserialize)]
38pub struct BatchCreateDataItemResponse {
39 pub success_items: Vec<DataItem>,
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub failed_items: Option<Vec<serde_json::Value>>,
44}
45
46impl ApiResponseTrait for BatchCreateDataItemResponse {
47 fn data_format() -> ResponseFormat {
48 ResponseFormat::Data
49 }
50}
51
52#[derive(Debug, Serialize, Deserialize)]
54pub struct GetDataItemResponse {
55 pub data_item: DataItem,
57}
58
59impl ApiResponseTrait for GetDataItemResponse {
60 fn data_format() -> ResponseFormat {
61 ResponseFormat::Data
62 }
63}
64
65#[derive(Debug, Serialize, Deserialize)]
67pub struct EmptyDataItemResponse {}
68
69impl ApiResponseTrait for EmptyDataItemResponse {
70 fn data_format() -> ResponseFormat {
71 ResponseFormat::Data
72 }
73}
74
75impl DataItemService {
76 pub fn new(config: Config) -> Self {
77 Self { config }
78 }
79
80 pub async fn create(
94 &self,
95 data_source_id: &str,
96 request: CreateDataItemRequest,
97 option: Option<RequestOption>,
98 ) -> SDKResult<BaseResponse<CreateDataItemResponse>> {
99 let api_req = ApiRequest {
100 http_method: Method::POST,
101 api_path: EndpointBuilder::replace_param(
102 crate::core::endpoints::search::SEARCH_V2_DATA_ITEM_CREATE,
103 "data_source_id",
104 data_source_id,
105 ),
106 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
107 body: serde_json::to_vec(&request)?,
108 ..Default::default()
109 };
110
111 Transport::request(api_req, &self.config, option).await
112 }
113
114 pub async fn batch_create(
128 &self,
129 data_source_id: &str,
130 request: BatchCreateDataItemRequest,
131 option: Option<RequestOption>,
132 ) -> SDKResult<BaseResponse<BatchCreateDataItemResponse>> {
133 let api_req = ApiRequest {
134 http_method: Method::POST,
135 api_path: EndpointBuilder::replace_param(
136 crate::core::endpoints::search::SEARCH_V2_DATA_ITEM_BATCH_CREATE,
137 "data_source_id",
138 data_source_id,
139 ),
140 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
141 body: serde_json::to_vec(&request)?,
142 ..Default::default()
143 };
144
145 Transport::request(api_req, &self.config, option).await
146 }
147
148 pub async fn delete(
158 &self,
159 data_source_id: &str,
160 data_item_id: &str,
161 option: Option<RequestOption>,
162 ) -> SDKResult<BaseResponse<EmptyDataItemResponse>> {
163 let api_req = ApiRequest {
164 http_method: Method::DELETE,
165 api_path: EndpointBuilder::replace_params_from_array(
166 crate::core::endpoints::search::SEARCH_V2_DATA_ITEM_OPERATION,
167 &[
168 ("data_source_id", data_source_id),
169 ("data_item_id", data_item_id),
170 ],
171 ),
172 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
173 ..Default::default()
174 };
175
176 Transport::request(api_req, &self.config, option).await
177 }
178
179 pub async fn get(
189 &self,
190 data_source_id: &str,
191 data_item_id: &str,
192 option: Option<RequestOption>,
193 ) -> SDKResult<BaseResponse<GetDataItemResponse>> {
194 let api_req = ApiRequest {
195 http_method: Method::GET,
196 api_path: EndpointBuilder::replace_params_from_array(
197 crate::core::endpoints::search::SEARCH_V2_DATA_ITEM_OPERATION,
198 &[
199 ("data_source_id", data_source_id),
200 ("data_item_id", data_item_id),
201 ],
202 ),
203 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
204 ..Default::default()
205 };
206
207 Transport::request(api_req, &self.config, option).await
208 }
209}