open_lark/service/cloud_docs/drive/v1/
event.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::cloud_docs::*,
11 http::Transport,
12 req_option::RequestOption,
13 SDKResult,
14 },
15 impl_executable_builder_owned,
16};
17
18pub struct EventService {
20 config: Config,
21}
22
23impl EventService {
24 pub fn new(config: Config) -> Self {
25 Self { config }
26 }
27
28 pub async fn subscribe_file_events(
34 &self,
35 request: SubscribeFileEventsRequest,
36 option: Option<RequestOption>,
37 ) -> SDKResult<BaseResponse<SubscribeFileEventsRespData>> {
38 let api_req = ApiRequest {
39 http_method: Method::POST,
40 api_path: DRIVE_V1_FILES_SUBSCRIBE.to_string(),
41 supported_access_token_types: vec![AccessTokenType::User, AccessTokenType::Tenant],
42 body: serde_json::to_vec(&request)?,
43 ..Default::default()
44 };
45
46 let api_resp = Transport::request(api_req, &self.config, option).await?;
47 Ok(api_resp)
48 }
49
50 pub async fn get_file_subscription(
56 &self,
57 request: GetFileSubscriptionRequest,
58 option: Option<RequestOption>,
59 ) -> SDKResult<BaseResponse<GetFileSubscriptionRespData>> {
60 let mut api_req = ApiRequest {
61 http_method: Method::GET,
62 api_path: DRIVE_V1_FILE_SUBSCRIPTIONS
63 .replace("{}", &request.file_token)
64 .replace("{}", &request.subscription_id),
65 ..Default::default()
66 };
67 api_req.supported_access_token_types = vec![AccessTokenType::User, AccessTokenType::Tenant];
68
69 let api_resp = Transport::request(api_req, &self.config, option).await?;
70 Ok(api_resp)
71 }
72
73 pub async fn unsubscribe_file_events(
79 &self,
80 request: UnsubscribeFileEventsRequest,
81 option: Option<RequestOption>,
82 ) -> SDKResult<BaseResponse<UnsubscribeFileEventsRespData>> {
83 let mut api_req = ApiRequest {
84 http_method: Method::DELETE,
85 api_path: DRIVE_V1_FILE_SUBSCRIPTIONS
86 .replace("{}", &request.file_token)
87 .replace("{}", &request.subscription_id),
88 ..Default::default()
89 };
90 api_req.supported_access_token_types = vec![AccessTokenType::User, AccessTokenType::Tenant];
91
92 let api_resp = Transport::request(api_req, &self.config, option).await?;
93 Ok(api_resp)
94 }
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, Default)]
99pub struct SubscribeFileEventsRequest {
100 pub file_token: String,
102 pub file_type: String,
104 pub event_types: Vec<String>,
106}
107
108impl SubscribeFileEventsRequest {
109 pub fn builder() -> SubscribeFileEventsRequestBuilder {
110 SubscribeFileEventsRequestBuilder::default()
111 }
112
113 pub fn new(
114 file_token: impl Into<String>,
115 file_type: impl Into<String>,
116 event_types: Vec<String>,
117 ) -> Self {
118 Self {
119 file_token: file_token.into(),
120 file_type: file_type.into(),
121 event_types,
122 }
123 }
124}
125
126#[derive(Default)]
128pub struct SubscribeFileEventsRequestBuilder {
129 request: SubscribeFileEventsRequest,
130}
131
132impl SubscribeFileEventsRequestBuilder {
133 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
134 self.request.file_token = file_token.into();
135 self
136 }
137
138 pub fn file_type(mut self, file_type: impl Into<String>) -> Self {
139 self.request.file_type = file_type.into();
140 self
141 }
142
143 pub fn event_types(mut self, event_types: Vec<String>) -> Self {
144 self.request.event_types = event_types;
145 self
146 }
147
148 pub fn add_event_type(mut self, event_type: impl Into<String>) -> Self {
149 self.request.event_types.push(event_type.into());
150 self
151 }
152
153 pub fn build(self) -> SubscribeFileEventsRequest {
154 self.request
155 }
156}
157
158impl_executable_builder_owned!(
159 SubscribeFileEventsRequestBuilder,
160 EventService,
161 SubscribeFileEventsRequest,
162 BaseResponse<SubscribeFileEventsRespData>,
163 subscribe_file_events
164);
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
168pub struct SubscribeFileEventsRespData {
169 pub subscription_id: String,
171 pub subscription_type: String,
173}
174
175impl ApiResponseTrait for SubscribeFileEventsRespData {
176 fn data_format() -> ResponseFormat {
177 ResponseFormat::Data
178 }
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize, Default)]
183pub struct GetFileSubscriptionRequest {
184 pub file_token: String,
186 pub subscription_id: String,
188}
189
190impl GetFileSubscriptionRequest {
191 pub fn builder() -> GetFileSubscriptionRequestBuilder {
192 GetFileSubscriptionRequestBuilder::default()
193 }
194
195 pub fn new(file_token: impl Into<String>, subscription_id: impl Into<String>) -> Self {
196 Self {
197 file_token: file_token.into(),
198 subscription_id: subscription_id.into(),
199 }
200 }
201}
202
203#[derive(Default)]
205pub struct GetFileSubscriptionRequestBuilder {
206 request: GetFileSubscriptionRequest,
207}
208
209impl GetFileSubscriptionRequestBuilder {
210 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
211 self.request.file_token = file_token.into();
212 self
213 }
214
215 pub fn subscription_id(mut self, subscription_id: impl Into<String>) -> Self {
216 self.request.subscription_id = subscription_id.into();
217 self
218 }
219
220 pub fn build(self) -> GetFileSubscriptionRequest {
221 self.request
222 }
223}
224
225impl_executable_builder_owned!(
226 GetFileSubscriptionRequestBuilder,
227 EventService,
228 GetFileSubscriptionRequest,
229 BaseResponse<GetFileSubscriptionRespData>,
230 get_file_subscription
231);
232
233#[derive(Debug, Clone, Serialize, Deserialize)]
235pub struct GetFileSubscriptionRespData {
236 pub subscription: FileSubscription,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize)]
241pub struct FileSubscription {
242 pub subscription_id: String,
244 pub file_token: String,
246 pub file_type: String,
248 pub event_types: Vec<String>,
250 pub is_active: bool,
252}
253
254impl ApiResponseTrait for GetFileSubscriptionRespData {
255 fn data_format() -> ResponseFormat {
256 ResponseFormat::Data
257 }
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize, Default)]
262pub struct UnsubscribeFileEventsRequest {
263 pub file_token: String,
265 pub subscription_id: String,
267}
268
269impl UnsubscribeFileEventsRequest {
270 pub fn builder() -> UnsubscribeFileEventsRequestBuilder {
271 UnsubscribeFileEventsRequestBuilder::default()
272 }
273
274 pub fn new(file_token: impl Into<String>, subscription_id: impl Into<String>) -> Self {
275 Self {
276 file_token: file_token.into(),
277 subscription_id: subscription_id.into(),
278 }
279 }
280}
281
282#[derive(Default)]
284pub struct UnsubscribeFileEventsRequestBuilder {
285 request: UnsubscribeFileEventsRequest,
286}
287
288impl UnsubscribeFileEventsRequestBuilder {
289 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
290 self.request.file_token = file_token.into();
291 self
292 }
293
294 pub fn subscription_id(mut self, subscription_id: impl Into<String>) -> Self {
295 self.request.subscription_id = subscription_id.into();
296 self
297 }
298
299 pub fn build(self) -> UnsubscribeFileEventsRequest {
300 self.request
301 }
302}
303
304impl_executable_builder_owned!(
305 UnsubscribeFileEventsRequestBuilder,
306 EventService,
307 UnsubscribeFileEventsRequest,
308 BaseResponse<UnsubscribeFileEventsRespData>,
309 unsubscribe_file_events
310);
311
312#[derive(Debug, Clone, Serialize, Deserialize)]
314pub struct UnsubscribeFileEventsRespData {
315 pub result: bool,
317}
318
319impl ApiResponseTrait for UnsubscribeFileEventsRespData {
320 fn data_format() -> ResponseFormat {
321 ResponseFormat::Data
322 }
323}