open_lark/service/search/v2/suite_search/
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::{SearchAppRequest, SearchMessageRequest, SearchResponse},
15};
16
17pub struct SuiteSearchService {
19 pub config: Config,
20}
21
22#[derive(Debug, Serialize, Deserialize)]
24pub struct SearchMessageResponse {
25 #[serde(flatten)]
27 pub search_result: SearchResponse,
28}
29
30impl ApiResponseTrait for SearchMessageResponse {
31 fn data_format() -> ResponseFormat {
32 ResponseFormat::Data
33 }
34}
35
36#[derive(Debug, Serialize, Deserialize)]
38pub struct SearchAppResponse {
39 #[serde(flatten)]
41 pub search_result: SearchResponse,
42}
43
44impl ApiResponseTrait for SearchAppResponse {
45 fn data_format() -> ResponseFormat {
46 ResponseFormat::Data
47 }
48}
49
50impl SuiteSearchService {
51 pub fn new(config: Config) -> Self {
52 Self { config }
53 }
54
55 pub async fn search_message(
69 &self,
70 request: SearchMessageRequest,
71 option: Option<RequestOption>,
72 ) -> SDKResult<BaseResponse<SearchMessageResponse>> {
73 let mut api_req = ApiRequest {
74 http_method: Method::POST,
75 api_path: crate::core::endpoints::search::SEARCH_V2_MESSAGE.to_string(),
76 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
77 body: serde_json::to_vec(&request)?,
78 ..Default::default()
79 };
80
81 if let Some(page_size) = request.page_size {
83 api_req
84 .query_params
85 .insert("page_size", page_size.to_string());
86 }
87 if let Some(page_token) = &request.page_token {
88 api_req
89 .query_params
90 .insert("page_token", page_token.clone());
91 }
92
93 Transport::request(api_req, &self.config, option).await
94 }
95
96 pub async fn search_app(
110 &self,
111 request: SearchAppRequest,
112 option: Option<RequestOption>,
113 ) -> SDKResult<BaseResponse<SearchAppResponse>> {
114 let mut api_req = ApiRequest {
115 http_method: Method::POST,
116 api_path: crate::core::endpoints::search::SEARCH_V2_APP.to_string(),
117 supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
118 body: serde_json::to_vec(&request)?,
119 ..Default::default()
120 };
121
122 if let Some(page_size) = request.page_size {
124 api_req
125 .query_params
126 .insert("page_size", page_size.to_string());
127 }
128 if let Some(page_token) = &request.page_token {
129 api_req
130 .query_params
131 .insert("page_token", page_token.clone());
132 }
133
134 Transport::request(api_req, &self.config, option).await
135 }
136}