#![allow(unused_imports)]
use crate::objects::*;
use crate::{
CursorPaginated, NextCursor, ResponseMetadata, SlackApiMethod, SlackClient, SlackError,
};
use serde::{Deserialize, Serialize};
#[doc(alias = "admin.analytics.getFile")]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[non_exhaustive]
pub struct AdminAnalyticsGetFileRequest {
pub r#type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata_only: Option<bool>,
}
impl AdminAnalyticsGetFileRequest {
pub fn new(r#type: impl Into<String>) -> Self {
Self {
r#type: r#type.into(),
date: None,
metadata_only: None,
}
}
pub fn date(mut self, date: impl Into<String>) -> Self {
self.date = Some(date.into());
self
}
pub fn metadata_only(mut self, metadata_only: bool) -> Self {
self.metadata_only = Some(metadata_only);
self
}
}
#[doc(alias = "admin.analytics.messages.activity")]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[non_exhaustive]
pub struct AdminAnalyticsMessagesActivityRequest {
pub channel: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub oldest_ts: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub latest_ts: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
}
impl AdminAnalyticsMessagesActivityRequest {
pub fn new(channel: impl Into<String>) -> Self {
Self {
channel: channel.into(),
oldest_ts: None,
latest_ts: None,
cursor: None,
limit: None,
}
}
pub fn oldest_ts(mut self, oldest_ts: impl Into<String>) -> Self {
self.oldest_ts = Some(oldest_ts.into());
self
}
pub fn latest_ts(mut self, latest_ts: impl Into<String>) -> Self {
self.latest_ts = Some(latest_ts.into());
self
}
pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
self.cursor = Some(cursor.into());
self
}
pub fn limit(mut self, limit: i64) -> Self {
self.limit = Some(limit);
self
}
}
impl SlackApiMethod for AdminAnalyticsMessagesActivityRequest {
const METHOD: &'static str = "admin.analytics.messages.activity";
type Response = AdminAnalyticsMessagesActivityResponse;
}
impl CursorPaginated for AdminAnalyticsMessagesActivityRequest {
fn set_cursor(&mut self, cursor: String) {
self.cursor = Some(cursor);
}
}
impl NextCursor for AdminAnalyticsMessagesActivityResponse {
fn next_cursor(&self) -> Option<&str> {
self.response_metadata.as_ref()?.next_cursor.as_deref()
}
}
#[doc(alias = "admin.analytics.messages.activity")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdminAnalyticsMessagesActivityResponse {
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub message_activities: Vec<AdminAnalyticsMessagesActivityResponseMessageActivities>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub response_metadata: Option<ResponseMetadata>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub warning: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdminAnalyticsMessagesActivityResponseMessageActivities {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub channel_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub timestamp: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub unique_user_reactions_count: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub unique_user_shares_count: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub unique_user_views_count: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub unique_user_clicks_count: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub unique_views_client:
Option<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueViewsClient>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub unique_stats_by_department:
Vec<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByDepartment>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub unique_stats_by_org:
Vec<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByOrg>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueViewsClient {
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub desktop_views_count: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub mobile_views_count: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub web_views_count: Option<i64>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByDepartment {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub department: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub views: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub reactions: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub shares: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub clicks: Option<i64>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByOrg {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub team_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub views: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub reactions: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub shares: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub clicks: Option<i64>,
}
#[doc(alias = "admin.analytics.messages.metadata")]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[non_exhaustive]
pub struct AdminAnalyticsMessagesMetadataRequest {
pub channel: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub oldest_ts: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub latest_ts: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
}
impl AdminAnalyticsMessagesMetadataRequest {
pub fn new(channel: impl Into<String>) -> Self {
Self {
channel: channel.into(),
oldest_ts: None,
latest_ts: None,
cursor: None,
}
}
pub fn oldest_ts(mut self, oldest_ts: impl Into<String>) -> Self {
self.oldest_ts = Some(oldest_ts.into());
self
}
pub fn latest_ts(mut self, latest_ts: impl Into<String>) -> Self {
self.latest_ts = Some(latest_ts.into());
self
}
pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
self.cursor = Some(cursor.into());
self
}
}
impl SlackApiMethod for AdminAnalyticsMessagesMetadataRequest {
const METHOD: &'static str = "admin.analytics.messages.metadata";
type Response = AdminAnalyticsMessagesMetadataResponse;
}
impl CursorPaginated for AdminAnalyticsMessagesMetadataRequest {
fn set_cursor(&mut self, cursor: String) {
self.cursor = Some(cursor);
}
}
impl NextCursor for AdminAnalyticsMessagesMetadataResponse {
fn next_cursor(&self) -> Option<&str> {
self.response_metadata.as_ref()?.next_cursor.as_deref()
}
}
#[doc(alias = "admin.analytics.messages.metadata")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdminAnalyticsMessagesMetadataResponse {
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub messages: Vec<Message>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub response_metadata: Option<ResponseMetadata>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub warning: Option<String>,
}
impl SlackClient {
#[doc(alias = "admin.analytics.getFile")]
pub async fn admin_analytics_get_file(
&self,
request: &AdminAnalyticsGetFileRequest,
) -> Result<bytes::Bytes, SlackError> {
self.call_bytes("admin.analytics.getFile", request).await
}
#[doc(alias = "admin.analytics.messages.activity")]
pub async fn admin_analytics_messages_activity(
&self,
request: &AdminAnalyticsMessagesActivityRequest,
) -> Result<AdminAnalyticsMessagesActivityResponse, SlackError> {
self.call(request).await
}
#[doc(alias = "admin.analytics.messages.metadata")]
pub async fn admin_analytics_messages_metadata(
&self,
request: &AdminAnalyticsMessagesMetadataRequest,
) -> Result<AdminAnalyticsMessagesMetadataResponse, SlackError> {
self.call(request).await
}
}