open_lark/service/search/v2/data_source/
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 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13 },
14 service::search::v2::models::{
15 CreateDataSourceRequest, DataSource, ListDataSourceRequest, ListDataSourceResponse,
16 UpdateDataSourceRequest,
17 },
18};
19
20pub struct DataSourceService {
22 pub config: Config,
23}
24
25#[derive(Debug, Serialize, Deserialize)]
27pub struct CreateDataSourceResponse {
28 pub data_source: DataSource,
30}
31
32impl ApiResponseTrait for CreateDataSourceResponse {
33 fn data_format() -> ResponseFormat {
34 ResponseFormat::Data
35 }
36}
37
38#[derive(Debug, Serialize, Deserialize)]
40pub struct GetDataSourceResponse {
41 pub data_source: DataSource,
43}
44
45impl ApiResponseTrait for GetDataSourceResponse {
46 fn data_format() -> ResponseFormat {
47 ResponseFormat::Data
48 }
49}
50
51#[derive(Debug, Serialize, Deserialize)]
53pub struct UpdateDataSourceResponse {
54 pub data_source: DataSource,
56}
57
58impl ApiResponseTrait for UpdateDataSourceResponse {
59 fn data_format() -> ResponseFormat {
60 ResponseFormat::Data
61 }
62}
63
64#[derive(Debug, Serialize, Deserialize)]
66pub struct EmptyDataSourceResponse {}
67
68impl ApiResponseTrait for EmptyDataSourceResponse {
69 fn data_format() -> ResponseFormat {
70 ResponseFormat::Data
71 }
72}
73
74impl ApiResponseTrait for ListDataSourceResponse {
75 fn data_format() -> ResponseFormat {
76 ResponseFormat::Data
77 }
78}
79
80impl DataSourceService {
81 pub fn new(config: Config) -> Self {
82 Self { config }
83 }
84
85 pub async fn create(
98 &self,
99 request: CreateDataSourceRequest,
100 option: Option<RequestOption>,
101 ) -> SDKResult<BaseResponse<CreateDataSourceResponse>> {
102 let api_req = ApiRequest {
103 http_method: Method::POST,
104 api_path: "/open-apis/search/v2/data_sources".to_string(),
105 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
106 body: serde_json::to_vec(&request)?,
107 ..Default::default()
108 };
109
110 Transport::request(api_req, &self.config, option).await
111 }
112
113 pub async fn delete(
122 &self,
123 data_source_id: &str,
124 option: Option<RequestOption>,
125 ) -> SDKResult<BaseResponse<EmptyDataSourceResponse>> {
126 let api_req = ApiRequest {
127 http_method: Method::DELETE,
128 api_path: format!("/open-apis/search/v2/data_sources/{data_source_id}"),
129 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
130 ..Default::default()
131 };
132
133 Transport::request(api_req, &self.config, option).await
134 }
135
136 pub async fn patch(
146 &self,
147 data_source_id: &str,
148 request: UpdateDataSourceRequest,
149 option: Option<RequestOption>,
150 ) -> SDKResult<BaseResponse<UpdateDataSourceResponse>> {
151 let api_req = ApiRequest {
152 http_method: Method::PATCH,
153 api_path: format!("/open-apis/search/v2/data_sources/{data_source_id}"),
154 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
155 body: serde_json::to_vec(&request)?,
156 ..Default::default()
157 };
158
159 Transport::request(api_req, &self.config, option).await
160 }
161
162 pub async fn get(
171 &self,
172 data_source_id: &str,
173 option: Option<RequestOption>,
174 ) -> SDKResult<BaseResponse<GetDataSourceResponse>> {
175 let api_req = ApiRequest {
176 http_method: Method::GET,
177 api_path: format!("/open-apis/search/v2/data_sources/{data_source_id}"),
178 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
179 ..Default::default()
180 };
181
182 Transport::request(api_req, &self.config, option).await
183 }
184
185 pub async fn list(
194 &self,
195 request: Option<ListDataSourceRequest>,
196 option: Option<RequestOption>,
197 ) -> SDKResult<BaseResponse<ListDataSourceResponse>> {
198 let mut api_req = ApiRequest {
199 http_method: Method::GET,
200 api_path: "/open-apis/search/v2/data_sources".to_string(),
201 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
202 ..Default::default()
203 };
204
205 if let Some(req) = request {
207 if let Some(page_size) = req.page_size {
208 api_req
209 .query_params
210 .insert("page_size".to_string(), page_size.to_string());
211 }
212 if let Some(page_token) = req.page_token {
213 api_req
214 .query_params
215 .insert("page_token".to_string(), page_token);
216 }
217 }
218
219 Transport::request(api_req, &self.config, option).await
220 }
221}