1#![allow(unused_imports)]
4
5use crate::objects::*;
6use crate::{
7 CursorPaginated, NextCursor, ResponseMetadata, SlackApiMethod, SlackClient, SlackError,
8};
9use serde::{Deserialize, Serialize};
10
11#[doc(alias = "admin.analytics.getFile")]
15#[derive(Debug, Clone, PartialEq, Serialize)]
16#[non_exhaustive]
17pub struct AdminAnalyticsGetFileRequest {
18 pub r#type: String,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub date: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub metadata_only: Option<bool>,
26}
27
28impl AdminAnalyticsGetFileRequest {
29 pub fn new(r#type: impl Into<String>) -> Self {
30 Self {
31 r#type: r#type.into(),
32 date: None,
33 metadata_only: None,
34 }
35 }
36
37 pub fn date(mut self, date: impl Into<String>) -> Self {
38 self.date = Some(date.into());
39 self
40 }
41
42 pub fn metadata_only(mut self, metadata_only: bool) -> Self {
43 self.metadata_only = Some(metadata_only);
44 self
45 }
46}
47
48#[doc(alias = "admin.analytics.messages.activity")]
52#[derive(Debug, Clone, PartialEq, Serialize)]
53#[non_exhaustive]
54pub struct AdminAnalyticsMessagesActivityRequest {
55 pub channel: String,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub oldest_ts: Option<String>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub latest_ts: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub cursor: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub limit: Option<i64>,
69}
70
71impl AdminAnalyticsMessagesActivityRequest {
72 pub fn new(channel: impl Into<String>) -> Self {
73 Self {
74 channel: channel.into(),
75 oldest_ts: None,
76 latest_ts: None,
77 cursor: None,
78 limit: None,
79 }
80 }
81
82 pub fn oldest_ts(mut self, oldest_ts: impl Into<String>) -> Self {
83 self.oldest_ts = Some(oldest_ts.into());
84 self
85 }
86
87 pub fn latest_ts(mut self, latest_ts: impl Into<String>) -> Self {
88 self.latest_ts = Some(latest_ts.into());
89 self
90 }
91
92 pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
93 self.cursor = Some(cursor.into());
94 self
95 }
96
97 pub fn limit(mut self, limit: i64) -> Self {
98 self.limit = Some(limit);
99 self
100 }
101}
102
103impl SlackApiMethod for AdminAnalyticsMessagesActivityRequest {
104 const METHOD: &'static str = "admin.analytics.messages.activity";
105 type Response = AdminAnalyticsMessagesActivityResponse;
106}
107
108impl CursorPaginated for AdminAnalyticsMessagesActivityRequest {
109 fn set_cursor(&mut self, cursor: String) {
110 self.cursor = Some(cursor);
111 }
112}
113
114impl NextCursor for AdminAnalyticsMessagesActivityResponse {
115 fn next_cursor(&self) -> Option<&str> {
116 self.response_metadata.as_ref()?.next_cursor.as_deref()
117 }
118}
119
120#[doc(alias = "admin.analytics.messages.activity")]
122#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
123pub struct AdminAnalyticsMessagesActivityResponse {
124 #[serde(
125 default,
126 deserialize_with = "crate::de::vec",
127 skip_serializing_if = "Vec::is_empty"
128 )]
129 pub message_activities: Vec<AdminAnalyticsMessagesActivityResponseMessageActivities>,
130 #[serde(
131 default,
132 deserialize_with = "crate::de::opt_object",
133 skip_serializing_if = "Option::is_none"
134 )]
135 pub response_metadata: Option<ResponseMetadata>,
136 #[serde(
137 default,
138 deserialize_with = "crate::de::opt_string",
139 skip_serializing_if = "Option::is_none"
140 )]
141 pub warning: Option<String>,
142}
143
144#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
145pub struct AdminAnalyticsMessagesActivityResponseMessageActivities {
146 #[serde(
147 default,
148 deserialize_with = "crate::de::opt_string",
149 skip_serializing_if = "Option::is_none"
150 )]
151 pub channel_id: Option<String>,
152 #[serde(
153 default,
154 deserialize_with = "crate::de::opt_string",
155 skip_serializing_if = "Option::is_none"
156 )]
157 pub timestamp: Option<String>,
158 #[serde(
159 default,
160 deserialize_with = "crate::de::opt_i64",
161 skip_serializing_if = "Option::is_none"
162 )]
163 pub unique_user_reactions_count: Option<i64>,
164 #[serde(
165 default,
166 deserialize_with = "crate::de::opt_i64",
167 skip_serializing_if = "Option::is_none"
168 )]
169 pub unique_user_shares_count: Option<i64>,
170 #[serde(
171 default,
172 deserialize_with = "crate::de::opt_i64",
173 skip_serializing_if = "Option::is_none"
174 )]
175 pub unique_user_views_count: Option<i64>,
176 #[serde(
177 default,
178 deserialize_with = "crate::de::opt_i64",
179 skip_serializing_if = "Option::is_none"
180 )]
181 pub unique_user_clicks_count: Option<i64>,
182 #[serde(
183 default,
184 deserialize_with = "crate::de::opt_object",
185 skip_serializing_if = "Option::is_none"
186 )]
187 pub unique_views_client:
188 Option<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueViewsClient>,
189 #[serde(
190 default,
191 deserialize_with = "crate::de::vec",
192 skip_serializing_if = "Vec::is_empty"
193 )]
194 pub unique_stats_by_department:
195 Vec<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByDepartment>,
196 #[serde(
197 default,
198 deserialize_with = "crate::de::vec",
199 skip_serializing_if = "Vec::is_empty"
200 )]
201 pub unique_stats_by_org:
202 Vec<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByOrg>,
203}
204
205#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
206pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueViewsClient {
207 #[serde(
208 default,
209 deserialize_with = "crate::de::opt_i64",
210 skip_serializing_if = "Option::is_none"
211 )]
212 pub desktop_views_count: Option<i64>,
213 #[serde(
214 default,
215 deserialize_with = "crate::de::opt_i64",
216 skip_serializing_if = "Option::is_none"
217 )]
218 pub mobile_views_count: Option<i64>,
219 #[serde(
220 default,
221 deserialize_with = "crate::de::opt_i64",
222 skip_serializing_if = "Option::is_none"
223 )]
224 pub web_views_count: Option<i64>,
225}
226
227#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
228pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByDepartment {
229 #[serde(
230 default,
231 deserialize_with = "crate::de::opt_string",
232 skip_serializing_if = "Option::is_none"
233 )]
234 pub department: Option<String>,
235 #[serde(
236 default,
237 deserialize_with = "crate::de::opt_i64",
238 skip_serializing_if = "Option::is_none"
239 )]
240 pub views: Option<i64>,
241 #[serde(
242 default,
243 deserialize_with = "crate::de::opt_i64",
244 skip_serializing_if = "Option::is_none"
245 )]
246 pub reactions: Option<i64>,
247 #[serde(
248 default,
249 deserialize_with = "crate::de::opt_i64",
250 skip_serializing_if = "Option::is_none"
251 )]
252 pub shares: Option<i64>,
253 #[serde(
254 default,
255 deserialize_with = "crate::de::opt_i64",
256 skip_serializing_if = "Option::is_none"
257 )]
258 pub clicks: Option<i64>,
259}
260
261#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
262pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByOrg {
263 #[serde(
264 default,
265 deserialize_with = "crate::de::opt_string",
266 skip_serializing_if = "Option::is_none"
267 )]
268 pub team_id: Option<String>,
269 #[serde(
270 default,
271 deserialize_with = "crate::de::opt_i64",
272 skip_serializing_if = "Option::is_none"
273 )]
274 pub views: Option<i64>,
275 #[serde(
276 default,
277 deserialize_with = "crate::de::opt_i64",
278 skip_serializing_if = "Option::is_none"
279 )]
280 pub reactions: Option<i64>,
281 #[serde(
282 default,
283 deserialize_with = "crate::de::opt_i64",
284 skip_serializing_if = "Option::is_none"
285 )]
286 pub shares: Option<i64>,
287 #[serde(
288 default,
289 deserialize_with = "crate::de::opt_i64",
290 skip_serializing_if = "Option::is_none"
291 )]
292 pub clicks: Option<i64>,
293}
294
295#[doc(alias = "admin.analytics.messages.metadata")]
299#[derive(Debug, Clone, PartialEq, Serialize)]
300#[non_exhaustive]
301pub struct AdminAnalyticsMessagesMetadataRequest {
302 pub channel: String,
304 #[serde(skip_serializing_if = "Option::is_none")]
306 pub oldest_ts: Option<String>,
307 #[serde(skip_serializing_if = "Option::is_none")]
309 pub latest_ts: Option<String>,
310 #[serde(skip_serializing_if = "Option::is_none")]
312 pub cursor: Option<String>,
313}
314
315impl AdminAnalyticsMessagesMetadataRequest {
316 pub fn new(channel: impl Into<String>) -> Self {
317 Self {
318 channel: channel.into(),
319 oldest_ts: None,
320 latest_ts: None,
321 cursor: None,
322 }
323 }
324
325 pub fn oldest_ts(mut self, oldest_ts: impl Into<String>) -> Self {
326 self.oldest_ts = Some(oldest_ts.into());
327 self
328 }
329
330 pub fn latest_ts(mut self, latest_ts: impl Into<String>) -> Self {
331 self.latest_ts = Some(latest_ts.into());
332 self
333 }
334
335 pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
336 self.cursor = Some(cursor.into());
337 self
338 }
339}
340
341impl SlackApiMethod for AdminAnalyticsMessagesMetadataRequest {
342 const METHOD: &'static str = "admin.analytics.messages.metadata";
343 type Response = AdminAnalyticsMessagesMetadataResponse;
344}
345
346impl CursorPaginated for AdminAnalyticsMessagesMetadataRequest {
347 fn set_cursor(&mut self, cursor: String) {
348 self.cursor = Some(cursor);
349 }
350}
351
352impl NextCursor for AdminAnalyticsMessagesMetadataResponse {
353 fn next_cursor(&self) -> Option<&str> {
354 self.response_metadata.as_ref()?.next_cursor.as_deref()
355 }
356}
357
358#[doc(alias = "admin.analytics.messages.metadata")]
360#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
361pub struct AdminAnalyticsMessagesMetadataResponse {
362 #[serde(
363 default,
364 deserialize_with = "crate::de::vec",
365 skip_serializing_if = "Vec::is_empty"
366 )]
367 pub messages: Vec<Message>,
368 #[serde(
369 default,
370 deserialize_with = "crate::de::opt_object",
371 skip_serializing_if = "Option::is_none"
372 )]
373 pub response_metadata: Option<ResponseMetadata>,
374 #[serde(
375 default,
376 deserialize_with = "crate::de::opt_string",
377 skip_serializing_if = "Option::is_none"
378 )]
379 pub warning: Option<String>,
380}
381
382impl SlackClient {
383 #[doc(alias = "admin.analytics.getFile")]
397 pub async fn admin_analytics_get_file(
398 &self,
399 request: &AdminAnalyticsGetFileRequest,
400 ) -> Result<bytes::Bytes, SlackError> {
401 self.call_bytes("admin.analytics.getFile", request).await
402 }
403
404 #[doc(alias = "admin.analytics.messages.activity")]
416 pub async fn admin_analytics_messages_activity(
417 &self,
418 request: &AdminAnalyticsMessagesActivityRequest,
419 ) -> Result<AdminAnalyticsMessagesActivityResponse, SlackError> {
420 self.call(request).await
421 }
422
423 #[doc(alias = "admin.analytics.messages.metadata")]
435 pub async fn admin_analytics_messages_metadata(
436 &self,
437 request: &AdminAnalyticsMessagesMetadataRequest,
438 ) -> Result<AdminAnalyticsMessagesMetadataResponse, SlackError> {
439 self.call(request).await
440 }
441}