diff options
| author | Timo <[email protected]> | 2017-12-20 12:19:37 -0500 |
|---|---|---|
| committer | alex <[email protected]> | 2017-12-20 18:19:37 +0100 |
| commit | f0a56f46ce7ef6c2a65d64d8953ac43e0b7b5b4d (patch) | |
| tree | 9e787011287a0045f3c88780eed91b7fbec2b1fa /src | |
| parent | GatewayEvent: don't unwrap deserializations (diff) | |
| download | serenity-f0a56f46ce7ef6c2a65d64d8953ac43e0b7b5b4d.tar.xz serenity-f0a56f46ce7ef6c2a65d64d8953ac43e0b7b5b4d.zip | |
Add variant adapters to Channel (#238)
Diffstat (limited to 'src')
| -rw-r--r-- | src/model/channel/mod.rs | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/model/channel/mod.rs b/src/model/channel/mod.rs index 479818b..1fe4345 100644 --- a/src/model/channel/mod.rs +++ b/src/model/channel/mod.rs @@ -56,6 +56,139 @@ pub enum Channel { } impl Channel { + + ///////////////////////////////////////////////////////////////////////// + // Adapter for each variant + ///////////////////////////////////////////////////////////////////////// + + /// Converts from `Channel` to `Option<Arc<RwLock<Group>>>`. + /// + /// Converts `self` into an `Option<Arc<RwLock<Group>>>`, consuming `self`, + /// and discarding a GuildChannel, PrivateChannel, or ChannelCategory, if any. + /// + /// # Examples + /// + /// Basic usage: + /// + /// ```rust,no_run + /// # extern crate serenity; + /// # use self::serenity::model::id::ChannelId; + /// # fn main() { + /// # let channel = ChannelId(0).get().unwrap(); + /// match channel.group() { + /// Some(group_lock) => { + /// if let Some(ref name) = group_lock.read().name { + /// println!("It's a group named {}!", name); + /// } else { + /// println!("It's an unnamed group!"); + /// } + /// }, + /// None => { println!("It's not a group!"); }, + /// } + /// # } + /// ``` + + + pub fn group(self) -> Option<Arc<RwLock<Group>>> { + match self { + Channel::Group(lock) => Some(lock), + _ => None, + } + } + + /// Converts from `Channel` to `Option<Arc<RwLock<GuildChannel>>>`. + /// + /// Converts `self` into an `Option<Arc<RwLock<GuildChannel>>>`, consuming `self`, + /// and discarding a Group, PrivateChannel, or ChannelCategory, if any. + /// + /// # Examples + /// + /// Basic usage: + /// + /// ```rust,no_run + /// # extern crate serenity; + /// # use self::serenity::model::id::ChannelId; + /// # fn main() { + /// let channel = ChannelId(0).get().unwrap(); + /// match channel.guild() { + /// Some(guild_lock) => { + /// println!("It's a guild named {}!", guild_lock.read().name); + /// }, + /// None => { println!("It's not a guild!"); }, + /// } + /// # } + /// ``` + + pub fn guild(self) -> Option<Arc<RwLock<GuildChannel>>> { + match self { + Channel::Guild(lock) => Some(lock), + _ => None, + } + } + + /// Converts from `Channel` to `Option<Arc<RwLock<PrivateChannel>>>`. + /// + /// Converts `self` into an `Option<Arc<RwLock<PrivateChannel>>>`, consuming `self`, + /// and discarding a Group, GuildChannel, or ChannelCategory, if any. + /// + /// # Examples + /// + /// Basic usage: + /// + /// ```rust,no_run + /// # extern crate serenity; + /// # use self::serenity::model::id::ChannelId; + /// # fn main() { + /// # let channel = ChannelId(0).get().unwrap(); + /// match channel.private() { + /// Some(private_lock) => { + /// let private = private_lock.read(); + /// let recipient_lock = &private.recipient; + /// let recipient = recipient_lock.read(); + /// println!("It's a private channel with {}!", recipient.name); + /// }, + /// None => { println!("It's not a private channel!"); }, + /// } + /// # } + /// ``` + + pub fn private(self) -> Option<Arc<RwLock<PrivateChannel>>> { + match self { + Channel::Private(lock) => Some(lock), + _ => None, + } + } + + /// Converts from `Channel` to `Option<Arc<RwLock<ChannelCategory>>>`. + /// + /// Converts `self` into an `Option<Arc<RwLock<ChannelCategory>>>`, consuming `self`, + /// and discarding a Group, GuildChannel, or PrivateChannel, if any. + /// + /// # Examples + /// + /// Basic usage: + /// + /// ```rust,no_run + /// # extern crate serenity; + /// # use self::serenity::model::id::ChannelId; + /// # fn main() { + /// # let channel = ChannelId(0).get().unwrap(); + /// match channel.category() { + /// Some(category_lock) => { + /// println!("It's a category named {}!", category_lock.read().name); + /// }, + /// None => { println!("It's not a category!"); }, + /// } + /// # } + /// ``` + + pub fn category(self) -> Option<Arc<RwLock<ChannelCategory>>> { + match self { + Channel::Category(lock) => Some(lock), + _ => None, + } + } + /// React to a [`Message`] with a custom [`Emoji`] or unicode character. /// /// [`Message::react`] may be a more suited method of reacting in most |