aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/model/guild/guild_id.rs28
-rw-r--r--src/model/guild/member.rs61
2 files changed, 37 insertions, 52 deletions
diff --git a/src/model/guild/guild_id.rs b/src/model/guild/guild_id.rs
index 68212c7..c2cfc3d 100644
--- a/src/model/guild/guild_id.rs
+++ b/src/model/guild/guild_id.rs
@@ -46,30 +46,14 @@ impl GuildId {
/// [`Guild::ban`]: struct.Guild.html#method.ban
/// [`User`]: struct.User.html
/// [Ban Members]: permissions/constant.BAN_MEMBERS.html
- pub fn ban<U: Into<UserId>, BO: Into<BanOptions>>(&self, user: U, ban_options: BO)
+ pub fn ban<U: Into<UserId>, BO: BanOptions>(&self, user: U, ban_options: BO)
-> Result<()> {
-
- use self::BanOptions::*;
-
- match ban_options.into() {
- DeleteMessageDays(dmd) => {
- if dmd > 7 {
- return Err(Error::Model(ModelError::DeleteMessageDaysAmount(dmd)));
- }
-
- http::ban_user(self.0, user.into().0, dmd, "")
- },
- DMDReason(dmd, reason) => {
- if dmd > 7 {
- return Err(Error::Model(ModelError::DeleteMessageDaysAmount(dmd)));
- }
-
- http::ban_user(self.0, user.into().0, dmd, &*reason)
- },
- Reason(reason) => {
- http::ban_user(self.0, user.into().0, 0, &*reason)
- },
+ let dmd = ban_options.dmd();
+ if dmd > 7 {
+ return Err(Error::Model(ModelError::DeleteMessageDaysAmount(dmd)));
}
+
+ http::ban_user(self.0, user.into().0, dmd, &*ban_options.reason())
}
/// Gets a list of the guild's bans.
diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs
index ebf99d0..b128887 100644
--- a/src/model/guild/member.rs
+++ b/src/model/guild/member.rs
@@ -16,33 +16,46 @@ use ::builder::EditMember;
#[cfg(all(feature="cache", feature="model", feature="utils"))]
use ::utils::Colour;
-pub enum BanOptions {
- DeleteMessageDays(u8),
- DMDReason(u8, String),
- Reason(String),
+pub trait BanOptions {
+ fn dmd(&self) -> u8 { 0 }
+ fn reason(&self) -> String { "".to_string() }
}
-impl From<u8> for BanOptions {
- fn from(dmd: u8) -> Self {
- BanOptions::DeleteMessageDays(dmd)
+impl BanOptions for u8 {
+ fn dmd(&self) -> u8 {
+ *self
}
}
-impl<'a> From<&'a str> for BanOptions {
- fn from(reason: &'a str) -> Self {
- BanOptions::Reason(reason.to_string())
+impl BanOptions for str {
+ fn reason(&self) -> String {
+ self.to_string()
}
}
-impl From<String> for BanOptions {
- fn from(reason: String) -> Self {
- BanOptions::Reason(reason)
+impl BanOptions for String {
+ fn reason(&self) -> String {
+ self.clone()
}
}
-impl<'a> From<(u8, &'a str)> for BanOptions {
- fn from(dmdreason: (u8, &'a str)) -> Self {
- BanOptions::DMDReason(dmdreason.0, dmdreason.1.to_string())
+impl<'a> BanOptions for (u8, &'a str) {
+ fn dmd(&self) -> u8 {
+ self.0
+ }
+
+ fn reason(&self) -> String {
+ self.1.to_string()
+ }
+}
+
+impl BanOptions for (u8, String) {
+ fn dmd(&self) -> u8 {
+ self.0
+ }
+
+ fn reason(&self) -> String {
+ self.1.clone()
}
}
@@ -132,20 +145,8 @@ impl Member {
///
/// [Ban Members]: permissions/constant.BAN_MEMBERS.html
#[cfg(feature="cache")]
- pub fn ban<BO: Into<BanOptions>>(&self, ban_options: BO) -> Result<()> {
- use self::BanOptions::*;
-
- match ban_options.into() {
- DeleteMessageDays(dmd) => {
- http::ban_user(self.guild_id.0, self.user.read().unwrap().id.0, dmd, "")
- },
- DMDReason(dmd, reason) => {
- http::ban_user(self.guild_id.0, self.user.read().unwrap().id.0, dmd, &*reason)
- },
- Reason(reason) => {
- http::ban_user(self.guild_id.0, self.user.read().unwrap().id.0, 0, &*reason)
- },
- }
+ pub fn ban<BO: BanOptions>(&self, ban_options: BO) -> Result<()> {
+ http::ban_user(self.guild_id.0, self.user.read().unwrap().id.0, ban_options.dmd(), &*ban_options.reason())
}
/// Determines the member's colour.