aboutsummaryrefslogtreecommitdiff
path: root/src/model/guild
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-12-16 08:39:36 -0800
committerZeyla Hellyer <[email protected]>2017-12-16 08:45:26 -0800
commitbcd16dddb8cc3086a13524c79676f3a8bebbc524 (patch)
tree42d254fb4738df957c4b7d9e5766d1cb5bd47323 /src/model/guild
parentFix guild deserialization tests (diff)
downloadserenity-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.rs11
-rw-r--r--src/model/guild/emoji.rs14
-rw-r--r--src/model/guild/guild_id.rs10
-rw-r--r--src/model/guild/member.rs2
-rw-r--r--src/model/guild/mod.rs59
-rw-r--r--src/model/guild/partial_guild.rs10
-rw-r--r--src/model/guild/role.rs4
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
//