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 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13 },
14 impl_executable_builder_owned,
15};
16
17pub struct EventService {
19 config: Config,
20}
21
22impl EventService {
23 pub fn new(config: Config) -> Self {
24 Self { config }
25 }
26
27 pub async fn subscribe_file_events(
33 &self,
34 request: SubscribeFileEventsRequest,
35 option: Option<RequestOption>,
36 ) -> SDKResult<BaseResponse<SubscribeFileEventsRespData>> {
37 let api_req = ApiRequest {
38 http_method: Method::POST,
39 api_path: "/open-apis/drive/v1/files/subscribe".to_string(),
40 supported_access_token_types: vec![AccessTokenType::User, AccessTokenType::Tenant],
41 body: serde_json::to_vec(&request)?,
42 ..Default::default()
43 };
44
45 let api_resp = Transport::request(api_req, &self.config, option).await?;
46 Ok(api_resp)
47 }
48
49 pub async fn get_file_subscription(
55 &self,
56 request: GetFileSubscriptionRequest,
57 option: Option<RequestOption>,
58 ) -> SDKResult<BaseResponse<GetFileSubscriptionRespData>> {
59 let mut api_req = ApiRequest {
60 http_method: Method::GET,
61 api_path: format!(
62 "/open-apis/drive/v1/files/{}/subscriptions/{}",
63 request.file_token, request.subscription_id
64 ),
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: format!(
86 "/open-apis/drive/v1/files/{}/subscriptions/{}",
87 request.file_token, request.subscription_id
88 ),
89 ..Default::default()
90 };
91 api_req.supported_access_token_types = vec![AccessTokenType::User, AccessTokenType::Tenant];
92
93 let api_resp = Transport::request(api_req, &self.config, option).await?;
94 Ok(api_resp)
95 }
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize, Default)]
100pub struct SubscribeFileEventsRequest {
101 pub file_token: String,
103 pub file_type: String,
105 pub event_types: Vec<String>,
107}
108
109impl SubscribeFileEventsRequest {
110 pub fn builder() -> SubscribeFileEventsRequestBuilder {
111 SubscribeFileEventsRequestBuilder::default()
112 }
113
114 pub fn new(
115 file_token: impl Into<String>,
116 file_type: impl Into<String>,
117 event_types: Vec<String>,
118 ) -> Self {
119 Self {
120 file_token: file_token.into(),
121 file_type: file_type.into(),
122 event_types,
123 }
124 }
125}
126
127#[derive(Default)]
129pub struct SubscribeFileEventsRequestBuilder {
130 request: SubscribeFileEventsRequest,
131}
132
133impl SubscribeFileEventsRequestBuilder {
134 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
135 self.request.file_token = file_token.into();
136 self
137 }
138
139 pub fn file_type(mut self, file_type: impl Into<String>) -> Self {
140 self.request.file_type = file_type.into();
141 self
142 }
143
144 pub fn event_types(mut self, event_types: Vec<String>) -> Self {
145 self.request.event_types = event_types;
146 self
147 }
148
149 pub fn add_event_type(mut self, event_type: impl Into<String>) -> Self {
150 self.request.event_types.push(event_type.into());
151 self
152 }
153
154 pub fn build(self) -> SubscribeFileEventsRequest {
155 self.request
156 }
157}
158
159impl_executable_builder_owned!(
160 SubscribeFileEventsRequestBuilder,
161 EventService,
162 SubscribeFileEventsRequest,
163 BaseResponse<SubscribeFileEventsRespData>,
164 subscribe_file_events
165);
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
169pub struct SubscribeFileEventsRespData {
170 pub subscription_id: String,
172 pub subscription_type: String,
174}
175
176impl ApiResponseTrait for SubscribeFileEventsRespData {
177 fn data_format() -> ResponseFormat {
178 ResponseFormat::Data
179 }
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize, Default)]
184pub struct GetFileSubscriptionRequest {
185 pub file_token: String,
187 pub subscription_id: String,
189}
190
191impl GetFileSubscriptionRequest {
192 pub fn builder() -> GetFileSubscriptionRequestBuilder {
193 GetFileSubscriptionRequestBuilder::default()
194 }
195
196 pub fn new(file_token: impl Into<String>, subscription_id: impl Into<String>) -> Self {
197 Self {
198 file_token: file_token.into(),
199 subscription_id: subscription_id.into(),
200 }
201 }
202}
203
204#[derive(Default)]
206pub struct GetFileSubscriptionRequestBuilder {
207 request: GetFileSubscriptionRequest,
208}
209
210impl GetFileSubscriptionRequestBuilder {
211 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
212 self.request.file_token = file_token.into();
213 self
214 }
215
216 pub fn subscription_id(mut self, subscription_id: impl Into<String>) -> Self {
217 self.request.subscription_id = subscription_id.into();
218 self
219 }
220
221 pub fn build(self) -> GetFileSubscriptionRequest {
222 self.request
223 }
224}
225
226impl_executable_builder_owned!(
227 GetFileSubscriptionRequestBuilder,
228 EventService,
229 GetFileSubscriptionRequest,
230 BaseResponse<GetFileSubscriptionRespData>,
231 get_file_subscription
232);
233
234#[derive(Debug, Clone, Serialize, Deserialize)]
236pub struct GetFileSubscriptionRespData {
237 pub subscription: FileSubscription,
239}
240
241#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct FileSubscription {
243 pub subscription_id: String,
245 pub file_token: String,
247 pub file_type: String,
249 pub event_types: Vec<String>,
251 pub is_active: bool,
253}
254
255impl ApiResponseTrait for GetFileSubscriptionRespData {
256 fn data_format() -> ResponseFormat {
257 ResponseFormat::Data
258 }
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize, Default)]
263pub struct UnsubscribeFileEventsRequest {
264 pub file_token: String,
266 pub subscription_id: String,
268}
269
270impl UnsubscribeFileEventsRequest {
271 pub fn builder() -> UnsubscribeFileEventsRequestBuilder {
272 UnsubscribeFileEventsRequestBuilder::default()
273 }
274
275 pub fn new(file_token: impl Into<String>, subscription_id: impl Into<String>) -> Self {
276 Self {
277 file_token: file_token.into(),
278 subscription_id: subscription_id.into(),
279 }
280 }
281}
282
283#[derive(Default)]
285pub struct UnsubscribeFileEventsRequestBuilder {
286 request: UnsubscribeFileEventsRequest,
287}
288
289impl UnsubscribeFileEventsRequestBuilder {
290 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
291 self.request.file_token = file_token.into();
292 self
293 }
294
295 pub fn subscription_id(mut self, subscription_id: impl Into<String>) -> Self {
296 self.request.subscription_id = subscription_id.into();
297 self
298 }
299
300 pub fn build(self) -> UnsubscribeFileEventsRequest {
301 self.request
302 }
303}
304
305impl_executable_builder_owned!(
306 UnsubscribeFileEventsRequestBuilder,
307 EventService,
308 UnsubscribeFileEventsRequest,
309 BaseResponse<UnsubscribeFileEventsRespData>,
310 unsubscribe_file_events
311);
312
313#[derive(Debug, Clone, Serialize, Deserialize)]
315pub struct UnsubscribeFileEventsRespData {
316 pub result: bool,
318}
319
320impl ApiResponseTrait for UnsubscribeFileEventsRespData {
321 fn data_format() -> ResponseFormat {
322 ResponseFormat::Data
323 }
324}