From 6a4e52b3fac7d2e96e3a1a67901fbdd4721fb249 Mon Sep 17 00:00:00 2001 From: acdenisSK Date: Mon, 2 Oct 2017 22:29:10 +0200 Subject: Use the de-generification trick. Fixes #168 --- src/builder/create_embed.rs | 16 +++++++++++++--- src/builder/create_message.rs | 6 +++++- src/builder/edit_guild.rs | 27 ++++++++++++++++++--------- src/builder/edit_member.rs | 8 ++++++-- src/builder/get_messages.rs | 24 ++++++++++++++++++------ 5 files changed, 60 insertions(+), 21 deletions(-) (limited to 'src/builder') diff --git a/src/builder/create_embed.rs b/src/builder/create_embed.rs index a128c91..7303693 100644 --- a/src/builder/create_embed.rs +++ b/src/builder/create_embed.rs @@ -62,14 +62,20 @@ impl CreateEmbed { /// [`colour`]: #method.colour #[cfg(feature = "utils")] #[inline] - pub fn color>(self, colour: C) -> Self { self.colour(colour.into()) } + pub fn color>(self, colour: C) -> Self { self.colour(colour) } + /// Set the colour of the left-hand side of the embed. #[cfg(feature = "utils")] pub fn colour>(mut self, colour: C) -> Self { + self._colour(colour.into()) + } + + #[cfg(feature = "utils")] + fn _colour(mut self, colour: Colour) -> Self { self.0.insert( "color".to_string(), - Value::Number(Number::from(colour.into().0 as u64)), + Value::Number(Number::from(colour.0 as u64)), ); CreateEmbed(self.0) @@ -282,8 +288,12 @@ impl CreateEmbed { /// let mut client = Client::new("token", Handler); client.start().unwrap(); /// ``` pub fn timestamp>(mut self, timestamp: T) -> Self { + self._timestamp(timestamp.into()) + } + + fn _timestamp(mut self, timestamp: Timestamp) -> Self { self.0 - .insert("timestamp".to_string(), Value::String(timestamp.into().ts)); + .insert("timestamp".to_string(), Value::String(timestamp.ts)); CreateEmbed(self.0) } diff --git a/src/builder/create_message.rs b/src/builder/create_message.rs index 96bad82..123c0b5 100644 --- a/src/builder/create_message.rs +++ b/src/builder/create_message.rs @@ -75,7 +75,11 @@ impl CreateMessage { /// Adds a list of reactions to create after the message's sent. pub fn reactions>(mut self, reactions: Vec) -> Self { - self.1 = Some(reactions.into_iter().map(|r| r.into()).collect()); + self._reactions(reactions.into_iter().map(|r| r.into()).collect()) + } + + fn _reactions(mut self, reactions: Vec) -> Self { + self.1 = Some(reactions); CreateMessage(self.0, self.1) } diff --git a/src/builder/edit_guild.rs b/src/builder/edit_guild.rs index 0719305..a4f2c54 100644 --- a/src/builder/edit_guild.rs +++ b/src/builder/edit_guild.rs @@ -22,13 +22,14 @@ impl EditGuild { /// valid. /// /// [`afk_timeout`]: #method.afk_timeout - pub fn afk_channel>(mut self, channel: Option) -> Self { + pub fn afk_channel>(self, channel: Option) -> Self { + self._afk_channel(channel.map(|c| c.into())) + } + + fn _afk_channel(mut self, channel: Option) -> Self { self.0.insert( "afk_channel_id".to_string(), - match channel { - Some(channel) => Value::Number(Number::from(channel.into().0)), - None => Value::Null, - }, + channel.map_or(Value::Null, |ChannelId(id)| Value::Number(Number::from(id))) ); self @@ -98,10 +99,14 @@ impl EditGuild { /// Transfers the ownership of the guild to another user by Id. /// /// **Note**: The current user must be the owner of the guild. - pub fn owner>(mut self, user_id: U) -> Self { + pub fn owner>(self, user_id: U) -> Self { + self._owner(user_id.into()) + } + + fn _owner(mut self, user_id: UserId) -> Self { self.0.insert( "owner_id".to_string(), - Value::Number(Number::from(user_id.into().0)), + Value::Number(Number::from(user_id.0)), ); self @@ -185,9 +190,13 @@ impl EditGuild { /// /// [`VerificationLevel`]: ../model/enum.VerificationLevel.html /// [`VerificationLevel::High`]: ../model/enum.VerificationLevel.html#variant.High - pub fn verification_level(mut self, verification_level: V) -> Self + pub fn verification_level(self, verification_level: V) -> Self where V: Into { - let num = Value::Number(Number::from(verification_level.into().num())); + self._verification_level(verification_level.into()) + } + + fn _verification_level(mut self, verification_level: VerificationLevel) -> Self { + let num = Value::Number(Number::from(verification_level.num())); self.0.insert("verification_level".to_string(), num); diff --git a/src/builder/edit_member.rs b/src/builder/edit_member.rs index e450669..53cf0d0 100644 --- a/src/builder/edit_member.rs +++ b/src/builder/edit_member.rs @@ -66,10 +66,14 @@ impl EditMember { /// Requires the [Move Members] permission. /// /// [Move Members]: ../model/permissions/constant.MOVE_MEMBERS.html - pub fn voice_channel>(mut self, channel_id: C) -> Self { + pub fn voice_channel>(self, channel_id: C) -> Self { + self._voice_channel(channel_id.into()) + } + + fn _voice_channel(mut self, channel_id: ChannelId) -> Self { self.0.insert( "channel_id".to_string(), - Value::Number(Number::from(channel_id.into().0)), + Value::Number(Number::from(channel_id.0)), ); self diff --git a/src/builder/get_messages.rs b/src/builder/get_messages.rs index 71af9e5..eff90f4 100644 --- a/src/builder/get_messages.rs +++ b/src/builder/get_messages.rs @@ -55,24 +55,36 @@ pub struct GetMessages(pub BTreeMap); impl GetMessages { /// Indicates to retrieve the messages after a specific message, given by /// its Id. - pub fn after>(mut self, message_id: M) -> Self { - self.0.insert("after".to_string(), message_id.into().0); + pub fn after>(self, message_id: M) -> Self { + self._after(message_id.into()) + } + + fn _after(mut self, MessageId(id): MessageId) -> Self { + self.0.insert("after".to_string(), id); self } /// Indicates to retrieve the messages _around_ a specific message in either /// direction (before+after) the given message. - pub fn around>(mut self, message_id: M) -> Self { - self.0.insert("around".to_string(), message_id.into().0); + pub fn around>(self, message_id: M) -> Self { + self._around(message_id.into()) + } + + fn _around(mut self, MessageId(id): MessageId) -> Self { + self.0.insert("around".to_string(), id); self } /// Indicates to retrieve the messages before a specific message, given by /// its Id. - pub fn before>(mut self, message_id: M) -> Self { - self.0.insert("before".to_string(), message_id.into().0); + pub fn before>(self, message_id: M) -> Self { + self._before(message_id.into()) + } + + fn _before(mut self, MessageId(id): MessageId) -> Self { + self.0.insert("before".to_string(), id); self } -- cgit v1.2.3