#![allow(unused_imports)]
use crate::objects::*;
use crate::{
CursorPaginated, NextCursor, ResponseMetadata, SlackApiMethod, SlackClient, SlackError,
};
use serde::{Deserialize, Serialize};
#[doc(alias = "oauth.access")]
#[derive(Debug, Clone, PartialEq, Serialize, Default)]
#[non_exhaustive]
pub struct OauthAccessRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub client_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_secret: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_uri: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub single_channel: Option<bool>,
}
impl OauthAccessRequest {
pub fn new() -> Self {
Self {
client_id: None,
client_secret: None,
code: None,
redirect_uri: None,
single_channel: None,
}
}
pub fn client_id(mut self, client_id: impl Into<String>) -> Self {
self.client_id = Some(client_id.into());
self
}
pub fn client_secret(mut self, client_secret: impl Into<String>) -> Self {
self.client_secret = Some(client_secret.into());
self
}
pub fn code(mut self, code: impl Into<String>) -> Self {
self.code = Some(code.into());
self
}
pub fn redirect_uri(mut self, redirect_uri: impl Into<String>) -> Self {
self.redirect_uri = Some(redirect_uri.into());
self
}
pub fn single_channel(mut self, single_channel: bool) -> Self {
self.single_channel = Some(single_channel);
self
}
}
impl SlackApiMethod for OauthAccessRequest {
const METHOD: &'static str = "oauth.access";
type Response = OauthAccessResponse;
}
#[doc(alias = "oauth.access")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthAccessResponse {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub access_token: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub token_type: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub app_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub app_user_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub team_name: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub team_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enterprise_id: Option<serde_json::Value>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub authorizing_user: Option<OauthAccessResponseAuthorizingUser>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub installer_user: Option<OauthAccessResponseInstallerUser>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub scopes: Option<OauthAccessResponseScopes>,
#[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 OauthAccessResponseAuthorizingUser {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub user_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub app_home: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthAccessResponseInstallerUser {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub user_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub app_home: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthAccessResponseScopes {
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub app_home: Vec<String>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub team: Vec<serde_json::Value>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub channel: Vec<String>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub group: Vec<String>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub mpim: Vec<String>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub im: Vec<String>,
#[serde(
default,
deserialize_with = "crate::de::vec",
skip_serializing_if = "Vec::is_empty"
)]
pub user: Vec<serde_json::Value>,
}
#[doc(alias = "oauth.v2.access")]
#[derive(Debug, Clone, PartialEq, Serialize, Default)]
#[non_exhaustive]
pub struct OauthV2AccessRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub client_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_secret: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code_verifier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_uri: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub grant_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assertion: Option<String>,
}
impl OauthV2AccessRequest {
pub fn new() -> Self {
Self {
client_id: None,
client_secret: None,
code: None,
code_verifier: None,
redirect_uri: None,
grant_type: None,
refresh_token: None,
assertion: None,
}
}
pub fn client_id(mut self, client_id: impl Into<String>) -> Self {
self.client_id = Some(client_id.into());
self
}
pub fn client_secret(mut self, client_secret: impl Into<String>) -> Self {
self.client_secret = Some(client_secret.into());
self
}
pub fn code(mut self, code: impl Into<String>) -> Self {
self.code = Some(code.into());
self
}
pub fn code_verifier(mut self, code_verifier: impl Into<String>) -> Self {
self.code_verifier = Some(code_verifier.into());
self
}
pub fn redirect_uri(mut self, redirect_uri: impl Into<String>) -> Self {
self.redirect_uri = Some(redirect_uri.into());
self
}
pub fn grant_type(mut self, grant_type: impl Into<String>) -> Self {
self.grant_type = Some(grant_type.into());
self
}
pub fn refresh_token(mut self, refresh_token: impl Into<String>) -> Self {
self.refresh_token = Some(refresh_token.into());
self
}
pub fn assertion(mut self, assertion: impl Into<String>) -> Self {
self.assertion = Some(assertion.into());
self
}
}
impl SlackApiMethod for OauthV2AccessRequest {
const METHOD: &'static str = "oauth.v2.access";
type Response = OauthV2AccessResponse;
}
#[doc(alias = "oauth.v2.access")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthV2AccessResponse {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub access_token: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub token_type: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub scope: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub bot_user_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub app_id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub team: Option<OauthV2AccessResponseTeam>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub enterprise: Option<Enterprise>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub authed_user: Option<OauthV2AccessResponseAuthedUser>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub expires_in: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub refresh_token: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_bool",
skip_serializing_if = "Option::is_none"
)]
pub is_enterprise_install: Option<bool>,
#[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 OauthV2AccessResponseTeam {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub name: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub id: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthV2AccessResponseAuthedUser {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub scope: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub access_token: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub token_type: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_i64",
skip_serializing_if = "Option::is_none"
)]
pub expires_in: Option<i64>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub refresh_token: Option<String>,
}
#[doc(alias = "oauth.v2.beginShortTokenRotation")]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[non_exhaustive]
pub struct OauthV2BeginShortTokenRotationRequest {
pub client_id: String,
pub client_secret: String,
}
impl OauthV2BeginShortTokenRotationRequest {
pub fn new(client_id: impl Into<String>, client_secret: impl Into<String>) -> Self {
Self {
client_id: client_id.into(),
client_secret: client_secret.into(),
}
}
}
impl SlackApiMethod for OauthV2BeginShortTokenRotationRequest {
const METHOD: &'static str = "oauth.v2.beginShortTokenRotation";
type Response = OauthV2BeginShortTokenRotationResponse;
}
#[doc(alias = "oauth.v2.beginShortTokenRotation")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthV2BeginShortTokenRotationResponse {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub new_token: Option<String>,
#[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>,
}
#[doc(alias = "oauth.v2.completeShortTokenRotation")]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[non_exhaustive]
pub struct OauthV2CompleteShortTokenRotationRequest {
pub client_id: String,
pub client_secret: String,
pub new_token: String,
}
impl OauthV2CompleteShortTokenRotationRequest {
pub fn new(
client_id: impl Into<String>,
client_secret: impl Into<String>,
new_token: impl Into<String>,
) -> Self {
Self {
client_id: client_id.into(),
client_secret: client_secret.into(),
new_token: new_token.into(),
}
}
}
impl SlackApiMethod for OauthV2CompleteShortTokenRotationRequest {
const METHOD: &'static str = "oauth.v2.completeShortTokenRotation";
type Response = OauthV2CompleteShortTokenRotationResponse;
}
#[doc(alias = "oauth.v2.completeShortTokenRotation")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthV2CompleteShortTokenRotationResponse {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub token: Option<String>,
#[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>,
}
#[doc(alias = "oauth.v2.exchange")]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[non_exhaustive]
pub struct OauthV2ExchangeRequest {
pub client_id: String,
pub client_secret: String,
}
impl OauthV2ExchangeRequest {
pub fn new(client_id: impl Into<String>, client_secret: impl Into<String>) -> Self {
Self {
client_id: client_id.into(),
client_secret: client_secret.into(),
}
}
}
impl SlackApiMethod for OauthV2ExchangeRequest {
const METHOD: &'static str = "oauth.v2.exchange";
type Response = OauthV2ExchangeResponse;
}
#[doc(alias = "oauth.v2.exchange")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthV2ExchangeResponse {
#[serde(flatten)]
pub extra: serde_json::Map<String, serde_json::Value>,
#[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>,
}
#[doc(alias = "oauth.v2.user.access")]
#[derive(Debug, Clone, PartialEq, Serialize, Default)]
#[non_exhaustive]
pub struct OauthV2UserAccessRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub client_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_secret: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code_verifier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_uri: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub grant_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assertion: Option<String>,
}
impl OauthV2UserAccessRequest {
pub fn new() -> Self {
Self {
client_id: None,
client_secret: None,
code: None,
code_verifier: None,
redirect_uri: None,
grant_type: None,
refresh_token: None,
assertion: None,
}
}
pub fn client_id(mut self, client_id: impl Into<String>) -> Self {
self.client_id = Some(client_id.into());
self
}
pub fn client_secret(mut self, client_secret: impl Into<String>) -> Self {
self.client_secret = Some(client_secret.into());
self
}
pub fn code(mut self, code: impl Into<String>) -> Self {
self.code = Some(code.into());
self
}
pub fn code_verifier(mut self, code_verifier: impl Into<String>) -> Self {
self.code_verifier = Some(code_verifier.into());
self
}
pub fn redirect_uri(mut self, redirect_uri: impl Into<String>) -> Self {
self.redirect_uri = Some(redirect_uri.into());
self
}
pub fn grant_type(mut self, grant_type: impl Into<String>) -> Self {
self.grant_type = Some(grant_type.into());
self
}
pub fn refresh_token(mut self, refresh_token: impl Into<String>) -> Self {
self.refresh_token = Some(refresh_token.into());
self
}
pub fn assertion(mut self, assertion: impl Into<String>) -> Self {
self.assertion = Some(assertion.into());
self
}
}
impl SlackApiMethod for OauthV2UserAccessRequest {
const METHOD: &'static str = "oauth.v2.user.access";
type Response = OauthV2UserAccessResponse;
}
#[doc(alias = "oauth.v2.user.access")]
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthV2UserAccessResponse {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub access_token: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub token_type: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub id_token: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub authed_user: Option<OauthV2UserAccessResponseAuthedUser>,
#[serde(
default,
deserialize_with = "crate::de::opt_object",
skip_serializing_if = "Option::is_none"
)]
pub team: Option<OauthV2UserAccessResponseTeam>,
#[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 OauthV2UserAccessResponseAuthedUser {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub id: Option<String>,
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub scope: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OauthV2UserAccessResponseTeam {
#[serde(
default,
deserialize_with = "crate::de::opt_string",
skip_serializing_if = "Option::is_none"
)]
pub id: Option<String>,
}
impl SlackClient {
#[doc(alias = "oauth.access")]
pub async fn oauth_access(
&self,
request: &OauthAccessRequest,
) -> Result<OauthAccessResponse, SlackError> {
self.call(request).await
}
#[doc(alias = "oauth.v2.access")]
pub async fn oauth_v2_access(
&self,
request: &OauthV2AccessRequest,
) -> Result<OauthV2AccessResponse, SlackError> {
self.call(request).await
}
#[doc(alias = "oauth.v2.beginShortTokenRotation")]
pub async fn oauth_v2_begin_short_token_rotation(
&self,
request: &OauthV2BeginShortTokenRotationRequest,
) -> Result<OauthV2BeginShortTokenRotationResponse, SlackError> {
self.call(request).await
}
#[doc(alias = "oauth.v2.completeShortTokenRotation")]
pub async fn oauth_v2_complete_short_token_rotation(
&self,
request: &OauthV2CompleteShortTokenRotationRequest,
) -> Result<OauthV2CompleteShortTokenRotationResponse, SlackError> {
self.call(request).await
}
#[doc(alias = "oauth.v2.exchange")]
pub async fn oauth_v2_exchange(
&self,
request: &OauthV2ExchangeRequest,
) -> Result<OauthV2ExchangeResponse, SlackError> {
self.call(request).await
}
#[doc(alias = "oauth.v2.user.access")]
pub async fn oauth_v2_user_access(
&self,
request: &OauthV2UserAccessRequest,
) -> Result<OauthV2UserAccessResponse, SlackError> {
self.call(request).await
}
}