use crate::models::payloads::_application_commands::_chat_input::shared::APIApplicationCommandOptionChoice;
use crate::models::payloads::channel::{APIActionRowComponent, APIComponentInModalActionRow};
use crate::models::rest::RESTPostAPIWebhookWithTokenJSONBody;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
#[repr(u8)]
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize_repr, Deserialize_repr)]
pub enum InteractionType {
Ping = 1,
ApplicationCommand = 2,
MessageComponent = 3,
ApplicationCommandAutocomplete = 4,
ModalSubmit = 5,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum APIInteractionResponse {
APIApplicationCommandAutocompleteResponse(APIApplicationCommandAutocompleteResponse),
APIInteractionResponseChannelMessageWithSource(APIInteractionResponseChannelMessageWithSource),
APIInteractionResponseDeferredChannelMessageWithSource(
APIInteractionResponseDeferredChannelMessageWithSource,
),
APIInteractionResponseDeferredMessageUpdate(APIInteractionResponseDeferredMessageUpdate),
APIInteractionResponseLaunchActivity(APIInteractionResponseLaunchActivity),
APIInteractionResponsePong(APIInteractionResponsePong),
APIInteractionResponseUpdateMessage(APIInteractionResponseUpdateMessage),
APIModalInteractionResponse(APIModalInteractionResponse),
APIPremiumRequiredInteractionResponse(APIPremiumRequiredInteractionResponse),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionResponsePong {
pub r#type: InteractionResponseType,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIApplicationCommandAutocompleteResponse {
pub r#type: InteractionResponseType,
pub data: APICommandAutocompleteInteractionResponseCallbackData,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIModalInteractionResponse {
pub r#type: InteractionResponseType,
pub data: APIModalInteractionResponseCallbackData,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIPremiumRequiredInteractionResponse {
pub r#type: InteractionResponseType,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionResponseChannelMessageWithSource {
pub r#type: InteractionResponseType,
pub data: APIInteractionResponseCallbackData,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionResponseDeferredChannelMessageWithSource {
pub r#type: InteractionResponseType,
pub data: Option<APIInteractionResponseCallbackDataFlagsOnly>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionResponseDeferredMessageUpdate {
pub r#type: InteractionResponseType,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionResponseUpdateMessage {
pub r#type: InteractionResponseType,
pub data: Option<APIInteractionResponseCallbackData>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionResponseLaunchActivity {
pub r#type: InteractionResponseType,
}
#[repr(u8)]
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize_repr, Deserialize_repr)]
pub enum InteractionResponseType {
Pong = 1,
ChannelMessageWithSource = 4,
DeferredChannelMessageWithSource = 5,
DeferredMessageUpdate = 6,
UpdateMessage = 7,
ApplicationCommandAutocompleteResult = 8,
Modal = 9,
PremiumRequired = 10,
LaunchActivity = 12,
}
pub type APIInteractionResponseCallbackData = RESTPostAPIWebhookWithTokenJSONBody;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionResponseCallbackDataFlagsOnly {
pub flags: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APICommandAutocompleteInteractionResponseCallbackData {
pub choices: Option<Vec<APIApplicationCommandOptionChoice>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIModalInteractionResponseCallbackData {
pub custom_id: String,
pub title: String,
pub components: Vec<APIActionRowComponent<APIComponentInModalActionRow>>,
}