use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GiveawayWinners {
Premium(crate::types::GiveawayWinnersPremium),
Star(crate::types::GiveawayWinnersStar),
Unknown(crate::types::GiveawayWinnersUnknown),
}
impl GiveawayWinners {
#[must_use]
pub fn additional_chat_count(&self) -> Option<i64> {
match self {
Self::Premium(val) => val.additional_chat_count,
Self::Star(val) => val.additional_chat_count,
Self::Unknown(val) => val.additional_chat_count,
}
}
#[must_use]
pub fn chat(&self) -> &crate::types::Chat {
match self {
Self::Premium(val) => val.chat.as_ref(),
Self::Star(val) => val.chat.as_ref(),
Self::Unknown(val) => val.chat.as_ref(),
}
}
#[must_use]
pub fn giveaway_message_id(&self) -> i64 {
match self {
Self::Premium(val) => val.giveaway_message_id,
Self::Star(val) => val.giveaway_message_id,
Self::Unknown(val) => val.giveaway_message_id,
}
}
#[must_use]
pub fn only_new_members(&self) -> Option<bool> {
match self {
Self::Premium(val) => val.only_new_members,
Self::Star(val) => val.only_new_members,
Self::Unknown(val) => val.only_new_members,
}
}
#[must_use]
pub fn premium_subscription_month_count(&self) -> Option<i64> {
match self {
Self::Premium(val) => Some(val.premium_subscription_month_count),
_ => None,
}
}
#[must_use]
pub fn prize_description(&self) -> Option<&str> {
match self {
Self::Premium(val) => val.prize_description.as_deref(),
Self::Star(val) => val.prize_description.as_deref(),
Self::Unknown(val) => val.prize_description.as_deref(),
}
}
#[must_use]
pub fn prize_star_count(&self) -> Option<i64> {
match self {
Self::Star(val) => Some(val.prize_star_count),
_ => None,
}
}
#[must_use]
pub fn unclaimed_prize_count(&self) -> Option<i64> {
match self {
Self::Premium(val) => val.unclaimed_prize_count,
Self::Star(val) => val.unclaimed_prize_count,
Self::Unknown(val) => val.unclaimed_prize_count,
}
}
#[must_use]
pub fn was_refunded(&self) -> Option<bool> {
match self {
Self::Premium(val) => val.was_refunded,
Self::Star(val) => val.was_refunded,
Self::Unknown(val) => val.was_refunded,
}
}
#[must_use]
pub fn winner_count(&self) -> i64 {
match self {
Self::Premium(val) => val.winner_count,
Self::Star(val) => val.winner_count,
Self::Unknown(val) => val.winner_count,
}
}
#[must_use]
pub fn winners(&self) -> &[crate::types::User] {
match self {
Self::Premium(val) => val.winners.as_ref(),
Self::Star(val) => val.winners.as_ref(),
Self::Unknown(val) => val.winners.as_ref(),
}
}
#[must_use]
pub fn winners_selection_date(&self) -> i64 {
match self {
Self::Premium(val) => val.winners_selection_date,
Self::Star(val) => val.winners_selection_date,
Self::Unknown(val) => val.winners_selection_date,
}
}
#[must_use]
pub fn first_name(&self) -> Option<&str> {
crate::types::Chat::first_name(self.chat())
}
#[must_use]
pub fn id(&self) -> i64 {
crate::types::Chat::id(self.chat())
}
#[must_use]
pub fn is_direct_messages(&self) -> Option<bool> {
crate::types::Chat::is_direct_messages(self.chat())
}
#[must_use]
pub fn is_forum(&self) -> Option<bool> {
crate::types::Chat::is_forum(self.chat())
}
#[must_use]
pub fn last_name(&self) -> Option<&str> {
crate::types::Chat::last_name(self.chat())
}
#[must_use]
pub fn title(&self) -> Option<&str> {
crate::types::Chat::title(self.chat())
}
#[must_use]
pub fn username(&self) -> Option<&str> {
crate::types::Chat::username(self.chat())
}
}
impl From<crate::types::GiveawayWinnersPremium> for GiveawayWinners {
fn from(val: crate::types::GiveawayWinnersPremium) -> Self {
Self::Premium(val)
}
}
impl TryFrom<GiveawayWinners> for crate::types::GiveawayWinnersPremium {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: GiveawayWinners) -> Result<Self, Self::Error> {
if let GiveawayWinners::Premium(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(GiveawayWinners),
stringify!(GiveawayWinnersPremium),
))
}
}
}
impl From<crate::types::GiveawayWinnersStar> for GiveawayWinners {
fn from(val: crate::types::GiveawayWinnersStar) -> Self {
Self::Star(val)
}
}
impl TryFrom<GiveawayWinners> for crate::types::GiveawayWinnersStar {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: GiveawayWinners) -> Result<Self, Self::Error> {
if let GiveawayWinners::Star(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(GiveawayWinners),
stringify!(GiveawayWinnersStar),
))
}
}
}
impl From<crate::types::GiveawayWinnersUnknown> for GiveawayWinners {
fn from(val: crate::types::GiveawayWinnersUnknown) -> Self {
Self::Unknown(val)
}
}
impl TryFrom<GiveawayWinners> for crate::types::GiveawayWinnersUnknown {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: GiveawayWinners) -> Result<Self, Self::Error> {
if let GiveawayWinners::Unknown(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(GiveawayWinners),
stringify!(GiveawayWinnersUnknown),
))
}
}
}