telers 1.0.0-beta.2

An asynchronous framework for Telegram Bot API written in Rust
Documentation
use serde::{Deserialize, Serialize};
/// This object describes the type of a reaction. Currently, it can be one of
/// - [`crate::types::ReactionTypeEmoji`]
/// - [`crate::types::ReactionTypeCustomEmoji`]
/// - [`crate::types::ReactionTypePaid`]
/// # Documentation
/// <https://core.telegram.org/bots/api#reactiontype>
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ReactionType {
    Emoji(crate::types::ReactionTypeEmoji),
    CustomEmoji(crate::types::ReactionTypeCustomEmoji),
    Paid(crate::types::ReactionTypePaid),
}
impl ReactionType {
    /// Helper method for field `custom_emoji_id`.
    ///
    /// Custom emoji identifier
    #[must_use]
    pub fn custom_emoji_id(&self) -> Option<&str> {
        match self {
            Self::CustomEmoji(val) => Some(val.custom_emoji_id.as_ref()),
            _ => None,
        }
    }

    /// Helper method for field `emoji`.
    ///
    /// Reaction emoji. Currently, it can be one of `โค`, `๐Ÿ‘`, `๐Ÿ‘Ž`, `๐Ÿ”ฅ`, `๐Ÿฅฐ`, `๐Ÿ‘`, `๐Ÿ˜`, `๐Ÿค”`, `๐Ÿคฏ`, `๐Ÿ˜ฑ`, `๐Ÿคฌ`, `๐Ÿ˜ข`, `๐ŸŽ‰`, `๐Ÿคฉ`, `๐Ÿคฎ`, `๐Ÿ’ฉ`, `๐Ÿ™`, `๐Ÿ‘Œ`, `๐Ÿ•Š`, `๐Ÿคก`, `๐Ÿฅฑ`, `๐Ÿฅด`, `๐Ÿ˜`, `๐Ÿณ`, `โคโ€๐Ÿ”ฅ`, `๐ŸŒš`, `๐ŸŒญ`, `๐Ÿ’ฏ`, `๐Ÿคฃ`, `โšก`, `๐ŸŒ`, `๐Ÿ†`, `๐Ÿ’”`, `๐Ÿคจ`, `๐Ÿ˜`, `๐Ÿ“`, `๐Ÿพ`, `๐Ÿ’‹`, `๐Ÿ–•`, `๐Ÿ˜ˆ`, `๐Ÿ˜ด`, `๐Ÿ˜ญ`, `๐Ÿค“`, `๐Ÿ‘ป`, `๐Ÿ‘จโ€๐Ÿ’ป`, `๐Ÿ‘€`, `๐ŸŽƒ`, `๐Ÿ™ˆ`, `๐Ÿ˜‡`, `๐Ÿ˜จ`, `๐Ÿค`, `โœ`, `๐Ÿค—`, `๐Ÿซก`, `๐ŸŽ…`, `๐ŸŽ„`, `โ˜ƒ`, `๐Ÿ’…`, `๐Ÿคช`, `๐Ÿ—ฟ`, `๐Ÿ†’`, `๐Ÿ’˜`, `๐Ÿ™‰`, `๐Ÿฆ„`, `๐Ÿ˜˜`, `๐Ÿ’Š`, `๐Ÿ™Š`, `๐Ÿ˜Ž`, `๐Ÿ‘พ`, `๐Ÿคทโ€โ™‚`, `๐Ÿคท`, `๐Ÿคทโ€โ™€`, `๐Ÿ˜ก`
    #[must_use]
    pub fn emoji(&self) -> Option<&str> {
        match self {
            Self::Emoji(val) => Some(val.emoji.as_ref()),
            _ => None,
        }
    }
}
impl From<crate::types::ReactionTypeEmoji> for ReactionType {
    fn from(val: crate::types::ReactionTypeEmoji) -> Self {
        Self::Emoji(val)
    }
}
impl TryFrom<ReactionType> for crate::types::ReactionTypeEmoji {
    type Error = crate::errors::ConvertToTypeError;

    fn try_from(val: ReactionType) -> Result<Self, Self::Error> {
        if let ReactionType::Emoji(inner) = val {
            Ok(inner)
        } else {
            Err(Self::Error::new(
                stringify!(ReactionType),
                stringify!(ReactionTypeEmoji),
            ))
        }
    }
}
impl From<crate::types::ReactionTypeCustomEmoji> for ReactionType {
    fn from(val: crate::types::ReactionTypeCustomEmoji) -> Self {
        Self::CustomEmoji(val)
    }
}
impl TryFrom<ReactionType> for crate::types::ReactionTypeCustomEmoji {
    type Error = crate::errors::ConvertToTypeError;

    fn try_from(val: ReactionType) -> Result<Self, Self::Error> {
        if let ReactionType::CustomEmoji(inner) = val {
            Ok(inner)
        } else {
            Err(Self::Error::new(
                stringify!(ReactionType),
                stringify!(ReactionTypeCustomEmoji),
            ))
        }
    }
}
impl From<crate::types::ReactionTypePaid> for ReactionType {
    fn from(val: crate::types::ReactionTypePaid) -> Self {
        Self::Paid(val)
    }
}
impl TryFrom<ReactionType> for crate::types::ReactionTypePaid {
    type Error = crate::errors::ConvertToTypeError;

    fn try_from(val: ReactionType) -> Result<Self, Self::Error> {
        if let ReactionType::Paid(inner) = val {
            Ok(inner)
        } else {
            Err(Self::Error::new(
                stringify!(ReactionType),
                stringify!(ReactionTypePaid),
            ))
        }
    }
}