use crate::models::payloads::base::{
APIBaseInteraction, APIDMInteractionWrapper, APIGuildInteractionWrapper,
APIInteractionDataResolved, APIUserInteractionDataResolved,
};
use crate::models::payloads::channel::ComponentType;
use crate::models::payloads::responses::InteractionType;
use serde::{Deserialize, Serialize};
pub type APIMessageComponentInteraction =
APIBaseInteraction<InteractionType, APIMessageComponentInteractionData>;
pub type APIMessageComponentButtonInteraction =
APIBaseInteraction<InteractionType, APIMessageButtonInteractionData>;
pub type APIMessageComponentSelectMenuInteraction =
APIBaseInteraction<InteractionType, APIMessageSelectMenuInteractionData>;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum APIMessageComponentInteractionData {
APIMessageButtonInteractionData(APIMessageButtonInteractionData),
APIMessageSelectMenuInteractionData(APIMessageSelectMenuInteractionData),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageComponentBaseInteractionData {
pub custom_id: String,
pub component_type: ComponentType,
}
pub type APIMessageButtonInteractionData = APIMessageComponentBaseInteractionData;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageStringSelectInteractionData {
#[serde(flatten)]
pub base: APIMessageComponentBaseInteractionData,
pub values: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageUserSelectInteractionData {
#[serde(flatten)]
pub base: APIMessageComponentBaseInteractionData,
pub values: Vec<String>,
pub resolved: APIUserInteractionDataResolved,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageRoleSelectInteractionData {
#[serde(flatten)]
pub base: APIMessageComponentBaseInteractionData,
pub values: Vec<String>,
pub resolved: APIInteractionDataResolved,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageMentionableSelectInteractionData {
#[serde(flatten)]
pub base: APIMessageComponentBaseInteractionData,
pub values: Vec<String>,
pub resolved: APIInteractionDataResolved,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageChannelSelectInteractionData {
#[serde(flatten)]
pub base: APIMessageComponentBaseInteractionData,
pub values: Vec<String>,
pub resolved: APIInteractionDataResolved,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum APIMessageSelectMenuInteractionData {
APIMessageChannelSelectInteractionData(APIMessageChannelSelectInteractionData),
APIMessageMentionableSelectInteractionData(APIMessageMentionableSelectInteractionData),
APIMessageRoleSelectInteractionData(APIMessageRoleSelectInteractionData),
APIMessageStringSelectInteractionData(APIMessageStringSelectInteractionData),
APIMessageUserSelectInteractionData(APIMessageUserSelectInteractionData),
}
pub type APIMessageComponentDMInteraction = APIDMInteractionWrapper<APIMessageComponentInteraction>;
pub type APIMessageComponentGuildInteraction =
APIGuildInteractionWrapper<APIMessageComponentInteraction>;