diff options
| author | Zeyla Hellyer <[email protected]> | 2017-12-16 08:39:36 -0800 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-12-16 08:45:26 -0800 |
| commit | bcd16dddb8cc3086a13524c79676f3a8bebbc524 (patch) | |
| tree | 42d254fb4738df957c4b7d9e5766d1cb5bd47323 /src/model/guild | |
| parent | Fix guild deserialization tests (diff) | |
| download | serenity-bcd16dddb8cc3086a13524c79676f3a8bebbc524.tar.xz serenity-bcd16dddb8cc3086a13524c79676f3a8bebbc524.zip | |
Break up the model module
The `model` module has historically been one giant module re-exporting
all of the model types, which is somewhere around 100 types. This can be
a lot to look at for a new user and somewhat overwhelming, especially
with a large number of fine-grained imports from the module.
The module is now neatly split up into submodules, mostly like it has
been internally since the early versions of the library. The submodules
are:
- application
- channel
- error
- event
- gateway
- guild
- id
- invite
- misc
- permissions
- prelude
- user
- voice
- webhook
Each submodule contains types that are "owned" by the module. For
example, the `guild` submodule contains, but not limited to, Emoji,
AuditLogsEntry, Role, and Member. `channel` contains, but not limited
to, Attachment, Embed, Message, and Reaction.
Upgrade path:
Instead of glob importing the models via `use serenity::model::*;`,
instead glob import via the prelude:
```rust
use serenity::model::prelude::*;
```
Instead of importing from the root model module:
```rust
use serenity::model::{Guild, Message, OnlineStatus, Role, User};
```
instead import from the submodules like so:
```rust
use serenity::model::channel::Message;
use serenity::model::guild::{Guild, Role};
use serenity::model::user::{OnlineStatus, User};
```
Diffstat (limited to 'src/model/guild')
| -rw-r--r-- | src/model/guild/audit_log.rs | 11 | ||||
| -rw-r--r-- | src/model/guild/emoji.rs | 14 | ||||
| -rw-r--r-- | src/model/guild/guild_id.rs | 10 | ||||
| -rw-r--r-- | src/model/guild/member.rs | 2 | ||||
| -rw-r--r-- | src/model/guild/mod.rs | 59 | ||||
| -rw-r--r-- | src/model/guild/partial_guild.rs | 10 | ||||
| -rw-r--r-- | src/model/guild/role.rs | 4 |
7 files changed, 86 insertions, 24 deletions
diff --git a/src/model/guild/audit_log.rs b/src/model/guild/audit_log.rs index 51138e0..7437e42 100644 --- a/src/model/guild/audit_log.rs +++ b/src/model/guild/audit_log.rs @@ -1,5 +1,6 @@ +use internal::prelude::*; use serde::de::{self, Deserialize, Deserializer, MapAccess, Visitor}; -use super::super::{AuditLogEntryId, User, UserId, ChannelId, Webhook}; +use super::super::prelude::*; use std::collections::HashMap; use std::mem::transmute; use std::fmt; @@ -147,7 +148,7 @@ pub struct Options { } -fn deserialize_action<'de, D: Deserializer<'de>>(de: D) -> Result<Action, D::Error> { +fn deserialize_action<'de, D: Deserializer<'de>>(de: D) -> StdResult<Action, D::Error> { struct ActionVisitor; impl<'de> Visitor<'de> for ActionVisitor { @@ -157,7 +158,7 @@ fn deserialize_action<'de, D: Deserializer<'de>>(de: D) -> Result<Action, D::Err formatter.write_str("an integer between 1 to 72") } - fn visit_u8<E: de::Error>(self, value: u8) -> Result<Action, E> { + fn visit_u8<E: de::Error>(self, value: u8) -> StdResult<Action, E> { Ok(match value { 1 => Action::GuildUpdate, 10...12 => Action::Channel(unsafe { transmute(value) }), @@ -177,7 +178,7 @@ fn deserialize_action<'de, D: Deserializer<'de>>(de: D) -> Result<Action, D::Err } impl<'de> Deserialize<'de> for AuditLogs { - fn deserialize<D: Deserializer<'de>>(de: D) -> Result<Self, D::Error> { + fn deserialize<D: Deserializer<'de>>(de: D) -> StdResult<Self, D::Error> { #[derive(Deserialize)] #[serde(field_identifier)] enum Field { @@ -195,7 +196,7 @@ impl<'de> Deserialize<'de> for AuditLogs { formatter.write_str("audit log entries") } - fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<AuditLogs, V::Error> { + fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> StdResult<AuditLogs, V::Error> { let mut audit_log_entries = None; let mut users = None; let mut webhooks = None; diff --git a/src/model/guild/emoji.rs b/src/model/guild/emoji.rs index 31d2a1f..9581f77 100644 --- a/src/model/guild/emoji.rs +++ b/src/model/guild/emoji.rs @@ -1,5 +1,5 @@ use std::fmt::{Display, Formatter, Result as FmtResult, Write as FmtWrite}; -use super::super::{EmojiId, RoleId}; +use super::super::id::{EmojiId, RoleId}; #[cfg(all(feature = "cache", feature = "model"))] use internal::prelude::*; @@ -51,7 +51,8 @@ impl Emoji { /// Delete a given emoji: /// /// ```rust,no_run - /// # use serenity::model::{Emoji, EmojiId}; + /// # use serenity::model::guild::Emoji; + /// # use serenity::model::id::EmojiId; /// # /// # let mut emoji = Emoji { /// # id: EmojiId(7), @@ -88,7 +89,8 @@ impl Emoji { /// Change the name of an emoji: /// /// ```rust,no_run - /// # use serenity::model::{Emoji, EmojiId}; + /// # use serenity::model::guild::Emoji; + /// # use serenity::model::id::EmojiId; /// # /// # let mut emoji = Emoji { /// # id: EmojiId(7), @@ -132,7 +134,8 @@ impl Emoji { /// Print the guild id that owns this emoji: /// /// ```rust,no_run - /// # use serenity::model::{Emoji, EmojiId}; + /// # use serenity::model::guild::Emoji; + /// # use serenity::model::id::EmojiId; /// # /// # let mut emoji = Emoji { /// # id: EmojiId(7), @@ -167,7 +170,8 @@ impl Emoji { /// Print the direct link to the given emoji: /// /// ```rust,no_run - /// # use serenity::model::{Emoji, EmojiId}; + /// # use serenity::model::guild::Emoji; + /// # use serenity::model::id::EmojiId; /// # /// # let mut emoji = Emoji { /// # id: EmojiId(7), diff --git a/src/model/guild/guild_id.rs b/src/model/guild/guild_id.rs index 37b3886..ad5866d 100644 --- a/src/model/guild/guild_id.rs +++ b/src/model/guild/guild_id.rs @@ -1,4 +1,4 @@ -use model::*; +use model::prelude::*; #[cfg(all(feature = "cache", feature = "model"))] use CACHE; @@ -73,11 +73,11 @@ impl GuildId { /// Gets a list of the guild's audit log entries #[inline] - pub fn audit_logs(&self, action_type: Option<u8>, - user_id: Option<UserId>, + pub fn audit_logs(&self, action_type: Option<u8>, + user_id: Option<UserId>, before: Option<AuditLogEntryId>, - limit: Option<u8>) -> Result<AuditLogs> { - http::get_audit_logs(self.0, action_type, user_id.map(|u| u.0), before.map(|a| a.0), limit) + limit: Option<u8>) -> Result<AuditLogs> { + http::get_audit_logs(self.0, action_type, user_id.map(|u| u.0), before.map(|a| a.0), limit) } /// Gets all of the guild's channels over the REST API. diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs index 5353fd4..0e8c4f6 100644 --- a/src/model/guild/member.rs +++ b/src/model/guild/member.rs @@ -1,4 +1,4 @@ -use model::*; +use model::prelude::*; use chrono::{DateTime, FixedOffset}; use std::fmt::{Display, Formatter, Result as FmtResult}; use super::deserialize_sync_user; diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs index 32b5ee2..d6a2c50 100644 --- a/src/model/guild/mod.rs +++ b/src/model/guild/mod.rs @@ -1,3 +1,5 @@ +//! Models relating to guilds and types that it owns. + mod emoji; mod guild_id; mod integration; @@ -15,7 +17,7 @@ pub use self::role::*; pub use self::audit_log::*; use chrono::{DateTime, FixedOffset}; -use model::*; +use model::prelude::*; use serde::de::Error as DeError; use serde_json; use super::utils::*; @@ -1363,7 +1365,7 @@ impl Guild { /// Obtain a reference to a [`Role`] by its name. /// /// ```rust,no_run - /// use serenity::model::*; + /// use serenity::model::prelude::*; /// use serenity::prelude::*; /// /// struct Handler; @@ -1583,6 +1585,19 @@ fn closest_to_origin(origin: &str, word_a: &str, word_b: &str) -> std::cmp::Orde value_a.cmp(&value_b) } +/// A container for guilds. +/// +/// This is used to differentiate whether a guild itself can be used or whether +/// a guild needs to be retrieved from the cache. +#[allow(large_enum_variant)] +#[derive(Clone, Debug)] +pub enum GuildContainer { + /// A guild which can have its contents directly searched. + Guild(PartialGuild), + /// A guild's id, which can be used to search the cache for a guild. + Id(GuildId), +} + /// Information relating to a guild's widget embed. #[derive(Clone, Copy, Debug, Deserialize)] pub struct GuildEmbed { @@ -1747,6 +1762,46 @@ impl MfaLevel { } } +/// The name of a region that a voice server can be located in. +#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)] +pub enum Region { + #[serde(rename = "amsterdam")] Amsterdam, + #[serde(rename = "brazil")] Brazil, + #[serde(rename = "eu-central")] EuCentral, + #[serde(rename = "eu-west")] EuWest, + #[serde(rename = "frankfurt")] Frankfurt, + #[serde(rename = "london")] London, + #[serde(rename = "sydney")] Sydney, + #[serde(rename = "us-central")] UsCentral, + #[serde(rename = "us-east")] UsEast, + #[serde(rename = "us-south")] UsSouth, + #[serde(rename = "us-west")] UsWest, + #[serde(rename = "vip-amsterdam")] VipAmsterdam, + #[serde(rename = "vip-us-east")] VipUsEast, + #[serde(rename = "vip-us-west")] VipUsWest, +} + +impl Region { + pub fn name(&self) -> &str { + match *self { + Region::Amsterdam => "amsterdam", + Region::Brazil => "brazil", + Region::EuCentral => "eu-central", + Region::EuWest => "eu-west", + Region::Frankfurt => "frankfurt", + Region::London => "london", + Region::Sydney => "sydney", + Region::UsCentral => "us-central", + Region::UsEast => "us-east", + Region::UsSouth => "us-south", + Region::UsWest => "us-west", + Region::VipAmsterdam => "vip-amsterdam", + Region::VipUsEast => "vip-us-east", + Region::VipUsWest => "vip-us-west", + } + } +} + enum_number!( #[doc="The level to set as criteria prior to a user being able to send messages in a [`Guild`]. diff --git a/src/model/guild/partial_guild.rs b/src/model/guild/partial_guild.rs index 857ef0d..d5312b5 100644 --- a/src/model/guild/partial_guild.rs +++ b/src/model/guild/partial_guild.rs @@ -1,4 +1,4 @@ -use model::*; +use model::prelude::*; use super::super::utils::{deserialize_emojis, deserialize_roles}; #[cfg(feature = "model")] @@ -448,7 +448,7 @@ impl PartialGuild { /// Obtain a reference to a [`Role`] by its name. /// /// ```rust,no_run - /// use serenity::model::*; + /// use serenity::model::prelude::*; /// use serenity::prelude::*; /// /// struct Handler; @@ -457,8 +457,10 @@ impl PartialGuild { /// /// impl EventHandler for Handler { /// fn message(&self, _: Context, msg: Message) { - /// if let Some(role) = - /// msg.guild_id().unwrap().get().unwrap().role_by_name("role_name") { + /// let guild = msg.guild_id().unwrap().get().unwrap(); + /// let possible_role = guild.role_by_name("role_name"); + /// + /// if let Some(role) = possible_role { /// println!("Obtained role's reference: {:?}", role); /// } /// } diff --git a/src/model/guild/role.rs b/src/model/guild/role.rs index 97a9cf6..6215c4e 100644 --- a/src/model/guild/role.rs +++ b/src/model/guild/role.rs @@ -1,4 +1,4 @@ -use model::*; +use model::prelude::*; use std::cmp::Ordering; #[cfg(all(feature = "builder", feature = "cache", feature = "model"))] @@ -79,7 +79,7 @@ impl Role { /// Make a role hoisted: /// /// ```rust,no_run - /// # use serenity::model::RoleId; + /// # use serenity::model::id::RoleId; /// # let role = RoleId(7).find().unwrap(); /// // assuming a `role` has already been bound // |