1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
use crate::types::Message;

/// Represents the kind of a chat.
#[derive(Debug, PartialEq, Clone)]
// todo: #[non_exhaustive]
pub enum Kind {
    /// The chat is private.
    // todo: #[non_exhaustive]
    Private {
        /// The username of the user.
        username: Option<String>,
        /// The first name of the user.
        first_name: String,
        /// The last name of the user.
        last_name: Option<String>,
    },
    /// The chat is a group.
    // todo: #[non_exhaustive]
    Group {
        /// The title of the group.
        title: String,
        /// `true` if all membmers of this group have admin rights.
        all_members_are_administrators: bool,
        /// The pinned message of the group.
        pinned_message: Option<Box<Message>>,
    },
    /// The chat is a supergroup.
    // todo: #[non_exhaustive]
    Supergroup {
        /// The title of the supergroup.
        title: String,
        /// The username of the supergroup.
        username: Option<String>,
        /// The description of the supergroup.
        description: Option<String>,
        /// The invite link of the supergroup.
        invite_link: Option<String>,
        /// The pinned message of the supergroup.
        pinned_message: Option<Box<Message>>,
        /// The name of the sticker set of the supergroup.
        sticker_set_name: Option<String>,
        /// `true` if the bot can set the sticker set of the supergroup.
        can_set_sticker_set: Option<bool>,
    },
    /// The chat is a channel.
    // todo: #[non_exhaustive]
    Channel {
        /// The title of the channel.
        title: String,
        /// The username of the channel.
        username: Option<String>,
        /// The description of the channel.
        description: Option<String>,
        /// The invite link of the channel.
        invite_link: Option<String>,
        /// The pinned message of the channel.
        pinned_message: Option<Box<Message>>,
    },
}

impl Kind {
    /// Checks if `self` is `Private`.
    pub fn is_private(&self) -> bool {
        match self {
            Kind::Private {
                ..
            } => true,
            _ => false,
        }
    }

    /// Checks if `self` is `Group`.
    pub fn is_group(&self) -> bool {
        match self {
            Kind::Group {
                ..
            } => true,
            _ => false,
        }
    }

    /// Checks if `self` is `Supergroup`.
    pub fn is_supergroup(&self) -> bool {
        match self {
            Kind::Supergroup {
                ..
            } => true,
            _ => false,
        }
    }

    /// Checks if `self` is `Channel`.
    pub fn is_channel(&self) -> bool {
        match self {
            Kind::Channel {
                ..
            } => true,
            _ => false,
        }
    }
}