aboutsummaryrefslogtreecommitdiff
path: root/src/utils/builder
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/builder')
-rw-r--r--src/utils/builder/create_embed.rs105
-rw-r--r--src/utils/builder/create_invite.rs33
-rw-r--r--src/utils/builder/create_message.rs8
-rw-r--r--src/utils/builder/edit_channel.rs41
-rw-r--r--src/utils/builder/edit_guild.rs74
-rw-r--r--src/utils/builder/edit_member.rs44
-rw-r--r--src/utils/builder/edit_profile.rs46
-rw-r--r--src/utils/builder/edit_role.rs76
-rw-r--r--src/utils/builder/execute_webhook.rs39
9 files changed, 268 insertions, 198 deletions
diff --git a/src/utils/builder/create_embed.rs b/src/utils/builder/create_embed.rs
index 86d5b11..7c1c606 100644
--- a/src/utils/builder/create_embed.rs
+++ b/src/utils/builder/create_embed.rs
@@ -15,11 +15,10 @@
//! [`ExecuteWebhook::embeds`]: struct.ExecuteWebhook.html#method.embeds
//! [here]: https://discordapp.com/developers/docs/resources/channel#embed-object
-use serde_json::builder::ObjectBuilder;
use serde_json::Value;
-use std::collections::BTreeMap;
use std::default::Default;
use time::Tm;
+use ::internal::prelude::*;
use ::model::Embed;
use ::utils::Colour;
@@ -34,7 +33,7 @@ use ::utils::Colour;
/// [`Context::send_message`]: ../../client/struct.Context.html#method.send_message
/// [`Embed`]: ../../model/struct.Embed.html
/// [`ExecuteWebhook::embeds`]: struct.ExecuteWebhook.html#method.embeds
-pub struct CreateEmbed(pub BTreeMap<String, Value>);
+pub struct CreateEmbed(pub Map<String, Value>);
impl CreateEmbed {
/// Set the author of the embed.
@@ -45,9 +44,9 @@ impl CreateEmbed {
/// [`CreateEmbedAuthor`]: struct.CreateEmbedAuthor.html
pub fn author<F>(mut self, f: F) -> Self
where F: FnOnce(CreateEmbedAuthor) -> CreateEmbedAuthor {
- let author = f(CreateEmbedAuthor::default()).0.build();
+ let author = f(CreateEmbedAuthor::default()).0;
- self.0.insert("author".to_owned(), author);
+ self.0.insert("author".to_owned(), Value::Object(author));
CreateEmbed(self.0)
}
@@ -63,7 +62,7 @@ impl CreateEmbed {
/// Set the colour of the left-hand side of the embed.
pub fn colour<C: Into<Colour>>(mut self, colour: C) -> Self {
- self.0.insert("color".to_owned(), Value::U64(colour.into().0 as u64));
+ self.0.insert("color".to_owned(), Value::Number(Number::from(colour.into().0 as u64)));
CreateEmbed(self.0)
}
@@ -89,7 +88,7 @@ impl CreateEmbed {
/// [`CreateEmbedField`]: struct.CreateEmbedField.html
pub fn field<F>(mut self, f: F) -> Self
where F: FnOnce(CreateEmbedField) -> CreateEmbedField {
- let field = f(CreateEmbedField::default()).0.build();
+ let field = f(CreateEmbedField::default()).0;
{
let key = "fields".to_owned();
@@ -106,7 +105,7 @@ impl CreateEmbed {
return CreateEmbed(self.0);
},
};
- arr.push(field);
+ arr.push(Value::Object(field));
self.0.insert("fields".to_owned(), Value::Array(arr));
}
@@ -122,18 +121,18 @@ impl CreateEmbed {
/// [`CreateEmbedFooter`]: struct.CreateEmbedFooter.html
pub fn footer<F>(mut self, f: F) -> Self
where F: FnOnce(CreateEmbedFooter) -> CreateEmbedFooter {
- let footer = f(CreateEmbedFooter::default()).0.build();
+ let footer = f(CreateEmbedFooter::default()).0;
- self.0.insert("footer".to_owned(), footer);
+ self.0.insert("footer".to_owned(), Value::Object(footer));
CreateEmbed(self.0)
}
/// Set the image associated with the embed. This only supports HTTP(S).
pub fn image(mut self, url: &str) -> Self {
- let image = ObjectBuilder::new()
- .insert("url".to_owned(), url.to_owned())
- .build();
+ let image = json!({
+ "url": url.to_owned()
+ });
self.0.insert("image".to_owned(), image);
@@ -142,9 +141,9 @@ impl CreateEmbed {
/// Set the thumbnail of the embed. This only supports HTTP(S).
pub fn thumbnail(mut self, url: &str) -> Self {
- let thumbnail = ObjectBuilder::new()
- .insert("url".to_owned(), url.to_owned())
- .build();
+ let thumbnail = json!({
+ "url": url.to_owned(),
+ });
self.0.insert("thumbnail".to_owned(), thumbnail);
@@ -198,7 +197,7 @@ impl CreateEmbed {
impl Default for CreateEmbed {
/// Creates a builder with default values, setting the `type` to `rich`.
fn default() -> CreateEmbed {
- let mut map = BTreeMap::new();
+ let mut map = Map::new();
map.insert("type".to_owned(), Value::String("rich".to_owned()));
CreateEmbed(map)
@@ -233,13 +232,11 @@ impl From<Embed> for CreateEmbed {
b = b.description(&description);
}
- if let Some(fields) = embed.fields {
- for field in fields {
- b = b.field(move |f| f
- .inline(field.inline)
- .name(&field.name)
- .value(&field.value));
- }
+ for field in embed.fields {
+ b = b.field(move |f| f
+ .inline(field.inline)
+ .name(&field.name)
+ .value(&field.value));
}
if let Some(image) = embed.image {
@@ -266,7 +263,6 @@ impl From<Embed> for CreateEmbed {
}
}
-
/// A builder to create a fake [`Embed`] object's author, for use with the
/// [`CreateEmbed::author`] method.
///
@@ -276,22 +272,28 @@ impl From<Embed> for CreateEmbed {
/// [`CreateEmbed::author`]: struct.CreateEmbed.html#method.author
/// [`name`]: #method.name
#[derive(Default)]
-pub struct CreateEmbedAuthor(pub ObjectBuilder);
+pub struct CreateEmbedAuthor(pub Map<String, Value>);
impl CreateEmbedAuthor {
/// Set the URL of the author's icon.
- pub fn icon_url(self, icon_url: &str) -> Self {
- CreateEmbedAuthor(self.0.insert("icon_url", icon_url))
+ pub fn icon_url(mut self, icon_url: &str) -> Self {
+ self.0.insert("icon_url".to_owned(), Value::String(icon_url.to_owned()));
+
+ self
}
/// Set the author's name.
- pub fn name(self, name: &str) -> Self {
- CreateEmbedAuthor(self.0.insert("name", name))
+ pub fn name(mut self, name: &str) -> Self {
+ self.0.insert("name".to_owned(), Value::String(name.to_owned()));
+
+ self
}
/// Set the author's URL.
- pub fn url(self, url: &str) -> Self {
- CreateEmbedAuthor(self.0.insert("url", url))
+ pub fn url(mut self, url: &str) -> Self {
+ self.0.insert("url".to_owned(), Value::String(url.to_owned()));
+
+ self
}
}
@@ -303,22 +305,28 @@ impl CreateEmbedAuthor {
///
/// [`Embed`]: ../../model/struct.Embed.html
/// [`CreateEmbed::field`]: struct.CreateEmbed.html#method.field
-pub struct CreateEmbedField(pub ObjectBuilder);
+pub struct CreateEmbedField(pub Map<String, Value>);
impl CreateEmbedField {
/// Set whether the field is inlined. Set to true by default.
- pub fn inline(self, inline: bool) -> Self {
- CreateEmbedField(self.0.insert("inline", inline))
+ pub fn inline(mut self, inline: bool) -> Self {
+ self.0.insert("inline".to_owned(), Value::Bool(inline));
+
+ self
}
/// Set the field's name. It can't be longer than 256 characters.
- pub fn name(self, name: &str) -> Self {
- CreateEmbedField(self.0.insert("name", name))
+ pub fn name(mut self, name: &str) -> Self {
+ self.0.insert("name".to_owned(), Value::String(name.to_owned()));
+
+ self
}
/// Set the field's value. It can't be longer than 1024 characters.
- pub fn value(self, value: &str) -> Self {
- CreateEmbedField(self.0.insert("value", value))
+ pub fn value(mut self, value: &str) -> Self {
+ self.0.insert("value".to_owned(), Value::String(value.to_owned()));
+
+ self
}
}
@@ -326,7 +334,10 @@ impl Default for CreateEmbedField {
/// Creates a builder with default values, setting the value of `inline` to
/// `true`.
fn default() -> CreateEmbedField {
- CreateEmbedField(ObjectBuilder::new().insert("inline", true))
+ let mut map = Map::new();
+ map.insert("inline".to_owned(), Value::Bool(true));
+
+ CreateEmbedField(map)
}
}
@@ -338,17 +349,21 @@ impl Default for CreateEmbedField {
/// [`Embed`]: ../../model/struct.Embed.html
/// [`CreateEmbed::footer`]: struct.CreateEmbed.html#method.footer
#[derive(Default)]
-pub struct CreateEmbedFooter(pub ObjectBuilder);
+pub struct CreateEmbedFooter(pub Map<String, Value>);
impl CreateEmbedFooter {
/// Set the icon URL's value. This only supports HTTP(S).
- pub fn icon_url(self, icon_url: &str) -> Self {
- CreateEmbedFooter(self.0.insert("icon_url", icon_url))
+ pub fn icon_url(mut self, icon_url: &str) -> Self {
+ self.0.insert("icon_url".to_owned(), Value::String(icon_url.to_owned()));
+
+ self
}
/// Set the footer's text.
- pub fn text(self, text: &str) -> Self {
- CreateEmbedFooter(self.0.insert("text", text))
+ pub fn text(mut self, text: &str) -> Self {
+ self.0.insert("text".to_owned(), Value::String(text.to_owned()));
+
+ self
}
}
diff --git a/src/utils/builder/create_invite.rs b/src/utils/builder/create_invite.rs
index 99125b3..d7595cd 100644
--- a/src/utils/builder/create_invite.rs
+++ b/src/utils/builder/create_invite.rs
@@ -1,6 +1,6 @@
-use serde_json::builder::ObjectBuilder;
use serde_json::Value;
use std::default::Default;
+use ::internal::prelude::*;
/// A builder to create a [`RichInvite`] for use via [`Context::create_invite`].
///
@@ -28,7 +28,7 @@ use std::default::Default;
///
/// [`Context::create_invite`]: ../../client/struct.Context.html#method.create_invite
/// [`RichInvite`]: ../../model/struct.Invite.html
-pub struct CreateInvite(pub ObjectBuilder);
+pub struct CreateInvite(pub JsonMap);
impl CreateInvite {
/// The duration that the invite will be valid for.
@@ -36,8 +36,10 @@ impl CreateInvite {
/// Set to `0` for an invite which does not expire after an amount of time.
///
/// Defaults to `86400`, or 24 hours.
- pub fn max_age(self, max_age: u64) -> Self {
- CreateInvite(self.0.insert("max_age", max_age))
+ pub fn max_age(mut self, max_age: u64) -> Self {
+ self.0.insert("max_age".to_owned(), Value::Number(Number::from(max_age)));
+
+ self
}
/// The number of uses that the invite will be valid for.
@@ -45,28 +47,37 @@ impl CreateInvite {
/// Set to `0` for an invite which does not expire after a number of uses.
///
/// Defaults to `0`.
- pub fn max_uses(self, max_uses: u64) -> Self {
- CreateInvite(self.0.insert("max_uses", max_uses))
+ pub fn max_uses(mut self, max_uses: u64) -> Self {
+ self.0.insert("max_uses".to_owned(), Value::Number(Number::from(max_uses)));
+
+ self
}
/// Whether an invite grants a temporary membership.
///
/// Defaults to `false`.
- pub fn temporary(self, temporary: bool) -> Self {
- CreateInvite(self.0.insert("temporary", temporary))
+ pub fn temporary(mut self, temporary: bool) -> Self {
+ self.0.insert("temporary".to_owned(), Value::Bool(temporary));
+
+ self
}
/// Whether or not to try to reuse a similar invite.
///
/// Defaults to `false`.
- pub fn unique(self, unique: bool) -> Self {
- CreateInvite(self.0.insert("unique", unique))
+ pub fn unique(mut self, unique: bool) -> Self {
+ self.0.insert("unique".to_owned(), Value::Bool(unique));
+
+ self
}
}
impl Default for CreateInvite {
/// Creates a builder with default values, setting `validate` to `null`.
fn default() -> CreateInvite {
- CreateInvite(ObjectBuilder::new().insert("validate", Value::Null))
+ let mut map = Map::new();
+ map.insert("validate".to_owned(), Value::Null);
+
+ CreateInvite(map)
}
}
diff --git a/src/utils/builder/create_message.rs b/src/utils/builder/create_message.rs
index 8aed477..2dbbd79 100644
--- a/src/utils/builder/create_message.rs
+++ b/src/utils/builder/create_message.rs
@@ -1,7 +1,5 @@
-use serde_json::Value;
-use std::collections::BTreeMap;
-use std::default::Default;
use super::CreateEmbed;
+use ::internal::prelude::*;
/// A builder to specify the contents of an [`rest::send_message`] request,
/// primarily meant for use through [`Context::send_message`].
@@ -38,7 +36,7 @@ use super::CreateEmbed;
/// [`content`]: #method.content
/// [`embed`]: #method.embed
/// [`rest::send_message`]: ../../client/rest/fn.send_message.html
-pub struct CreateMessage(pub BTreeMap<String, Value>);
+pub struct CreateMessage(pub Map<String, Value>);
impl CreateMessage {
/// Set the content of the message.
@@ -79,7 +77,7 @@ impl Default for CreateMessage {
/// [`Message`]: ../../model/struct.Message.html
/// [`tts`]: #method.tts
fn default() -> CreateMessage {
- let mut map = BTreeMap::default();
+ let mut map = Map::default();
map.insert("tts".to_owned(), Value::Bool(false));
CreateMessage(map)
diff --git a/src/utils/builder/edit_channel.rs b/src/utils/builder/edit_channel.rs
index e136cbf..2fa61a5 100644
--- a/src/utils/builder/edit_channel.rs
+++ b/src/utils/builder/edit_channel.rs
@@ -1,5 +1,4 @@
-use serde_json::builder::ObjectBuilder;
-use std::default::Default;
+use ::internal::prelude::*;
/// A builder to edit a [`GuildChannel`] for use via one of a couple methods.
///
@@ -24,7 +23,8 @@ use std::default::Default;
/// [`Context::edit_channel`]: ../client/struct.Context.html#method.edit_channel
/// [`GuildChannel`]: ../model/struct.GuildChannel.html
/// [`GuildChannel::edit`]: ../model/struct.GuildChannel.html#method.edit
-pub struct EditChannel(pub ObjectBuilder);
+#[derive(Default)]
+pub struct EditChannel(pub JsonMap);
impl EditChannel {
/// The bitrate of the channel in bits.
@@ -32,20 +32,26 @@ impl EditChannel {
/// This is for [voice] channels only.
///
/// [voice]: ../../model/enum.ChannelType.html#variant.Voice
- pub fn bitrate(self, bitrate: u64) -> Self {
- EditChannel(self.0.insert("bitrate", bitrate))
+ pub fn bitrate(mut self, bitrate: u64) -> Self {
+ self.0.insert("bitrate".to_owned(), Value::Number(Number::from(bitrate)));
+
+ self
}
/// The name of the channel.
///
/// Must be between 2 and 100 characters long.
- pub fn name(self, name: &str) -> Self {
- EditChannel(self.0.insert("name", name))
+ pub fn name(mut self, name: &str) -> Self {
+ self.0.insert("name".to_owned(), Value::String(name.to_owned()));
+
+ self
}
/// The position of the channel in the channel list.
- pub fn position(self, position: u64) -> Self {
- EditChannel(self.0.insert("position", position))
+ pub fn position(mut self, position: u64) -> Self {
+ self.0.insert("position".to_owned(), Value::Number(Number::from(position)));
+
+ self
}
/// The topic of the channel. Can be empty.
@@ -55,8 +61,10 @@ impl EditChannel {
/// This is for [text] channels only.
///
/// [text]: ../../model/enum.ChannelType.html#variant.Text
- pub fn topic(self, topic: &str) -> Self {
- EditChannel(self.0.insert("topic", topic))
+ pub fn topic(mut self, topic: &str) -> Self {
+ self.0.insert("topic".to_owned(), Value::String(topic.to_owned()));
+
+ self
}
/// The number of users that may be in the channel simultaneously.
@@ -64,14 +72,9 @@ impl EditChannel {
/// This is for [voice] channels only.
///
/// [voice]: ../../model/enum.ChannelType.html#variant.Voice
- pub fn user_limit(self, user_limit: u64) -> Self {
- EditChannel(self.0.insert("user_limit", user_limit))
- }
-}
+ pub fn user_limit(mut self, user_limit: u64) -> Self {
+ self.0.insert("user_limit".to_owned(), Value::Number(Number::from(user_limit)));
-impl Default for EditChannel {
- /// Creates a builder with no default parameters.
- fn default() -> EditChannel {
- EditChannel(ObjectBuilder::new())
+ self
}
}
diff --git a/src/utils/builder/edit_guild.rs b/src/utils/builder/edit_guild.rs
index 83d5016..bd94efa 100644
--- a/src/utils/builder/edit_guild.rs
+++ b/src/utils/builder/edit_guild.rs
@@ -1,6 +1,4 @@
-use serde_json::builder::ObjectBuilder;
-use serde_json::Value;
-use std::default::Default;
+use ::internal::prelude::*;
use ::model::{ChannelId, Region, UserId, VerificationLevel};
/// A builder to optionally edit certain fields of a [`Guild`]. This is meant
@@ -13,7 +11,8 @@ use ::model::{ChannelId, Region, UserId, VerificationLevel};
/// [`Guild`]: ../../model/struct.Guild.html
/// [`LiveGuild::edit`]: ../../model/struct.LiveGuild.html#method.edit
/// [Manage Guild]: ../../model/permissions/constant.MANAGE_GUILD.html
-pub struct EditGuild(pub ObjectBuilder);
+#[derive(Default)]
+pub struct EditGuild(pub Map<String, Value>);
impl EditGuild {
/// Set the "AFK voice channel" that users are to move to if they have been
@@ -24,19 +23,23 @@ impl EditGuild {
/// valid.
///
/// [`afk_timeout`]: #method.afk_timeout
- pub fn afk_channel<C: Into<ChannelId>>(self, channel: Option<C>) -> Self {
- EditGuild(self.0.insert("afk_channel_id", match channel {
- Some(channel) => Value::U64(channel.into().0),
+ pub fn afk_channel<C: Into<ChannelId>>(mut self, channel: Option<C>) -> Self {
+ self.0.insert("afk_channel_id".to_owned(), match channel {
+ Some(channel) => Value::Number(Number::from(channel.into().0)),
None => Value::Null,
- }))
+ });
+
+ self
}
/// Set the amount of time a user is to be moved to the AFK channel -
/// configured via [`afk_channel`] - after being AFK.
///
/// [`afk_channel`]: #method.afk_channel
- pub fn afk_timeout(self, timeout: u64) -> Self {
- EditGuild(self.0.insert("afk_timeout", timeout))
+ pub fn afk_timeout(mut self, timeout: u64) -> Self {
+ self.0.insert("afk_timeout".to_owned(), Value::Number(Number::from(timeout)));
+
+ self
}
/// Set the icon of the guild. Pass `None` to remove the icon.
@@ -58,25 +61,28 @@ impl EditGuild {
/// ```
///
/// [`utils::read_image`]: ../../utils/fn.read_image.html
- pub fn icon(self, icon: Option<&str>) -> Self {
- EditGuild(self.0
- .insert("icon",
- icon.map_or_else(|| Value::Null,
- |x| Value::String(x.to_owned()))))
+ pub fn icon(mut self, icon: Option<&str>) -> Self {
+ self.0.insert("icon".to_owned(), icon.map_or_else(|| Value::Null, |x| Value::String(x.to_owned())));
+
+ self
}
/// Set the name of the guild.
///
/// **Note**: Must be between (and including) 2-100 chracters.
- pub fn name(self, name: &str) -> Self {
- EditGuild(self.0.insert("name", name))
+ pub fn name(mut self, name: &str) -> Self {
+ self.0.insert("name".to_owned(), Value::String(name.to_owned()));
+
+ self
}
/// 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<U: Into<UserId>>(self, user_id: U) -> Self {
- EditGuild(self.0.insert("owner_id", user_id.into().0))
+ pub fn owner<U: Into<UserId>>(mut self, user_id: U) -> Self {
+ self.0.insert("owner_id".to_owned(), Value::Number(Number::from(user_id.into().0)));
+
+ self
}
/// Set the voice region of the server.
@@ -96,8 +102,10 @@ impl EditGuild {
/// ```
///
/// [`Region::UsWest`]: ../../model/enum.Region.html#variant.UsWest
- pub fn region(self, region: Region) -> Self {
- EditGuild(self.0.insert("region", region.name()))
+ pub fn region(mut self, region: Region) -> Self {
+ self.0.insert("region".to_owned(), Value::String(region.name().to_owned()));
+
+ self
}
/// Set the splash image of the guild on the invitation page.
@@ -107,11 +115,12 @@ impl EditGuild {
///
/// [`InviteSplash`]: ../../model/enum.Feature.html#variant.InviteSplash
/// [`features`]: ../../model/struct.LiveGuild.html#structfield.features
- pub fn splash(self, splash: Option<&str>) -> Self {
- EditGuild(self.0
- .insert("splash",
- splash.map_or_else(|| Value::Null,
- |x| Value::String(x.to_owned()))))
+ pub fn splash(mut self, splash: Option<&str>) -> Self {
+ let splash = splash.map_or(Value::Null, |x| Value::String(x.to_owned()));
+
+ self.0.insert("splash".to_owned(), splash);
+
+ self
}
/// Set the verification level of the guild. This can restrict what a
@@ -145,15 +154,12 @@ impl EditGuild {
///
/// [`VerificationLevel`]: ../../model/enum.VerificationLevel.html
/// [`VerificationLevel::High`]: ../../model/enum.VerificationLevel.html#variant.High
- pub fn verification_level<V>(self, verification_level: V) -> Self
+ pub fn verification_level<V>(mut self, verification_level: V) -> Self
where V: Into<VerificationLevel> {
- EditGuild(self.0.insert("verification_level",
- verification_level.into().num()))
- }
-}
+ let num = Value::Number(Number::from(verification_level.into().num()));
+
+ self.0.insert("verification_level".to_owned(), num);
-impl Default for EditGuild {
- fn default() -> EditGuild {
- EditGuild(ObjectBuilder::new())
+ self
}
}
diff --git a/src/utils/builder/edit_member.rs b/src/utils/builder/edit_member.rs
index cb67214..58f260a 100644
--- a/src/utils/builder/edit_member.rs
+++ b/src/utils/builder/edit_member.rs
@@ -1,6 +1,5 @@
-use serde_json::builder::ObjectBuilder;
-use std::default::Default;
use ::model::{ChannelId, RoleId};
+use ::internal::prelude::*;
/// A builder which edits the properties of a [`Member`], to be used in
/// conjunction with [`Context::edit_member`] and [`Member::edit`].
@@ -8,7 +7,8 @@ use ::model::{ChannelId, RoleId};
/// [`Context::edit_member`]: ../../client/struct.Context.html#method.edit_member
/// [`Member`]: ../../model/struct.Member.html
/// [`Member::edit`]: ../../model/struct.Member.html#method.edit
-pub struct EditMember(pub ObjectBuilder);
+#[derive(Default)]
+pub struct EditMember(pub JsonMap);
impl EditMember {
/// Whether to deafen the member.
@@ -16,8 +16,10 @@ impl EditMember {
/// Requires the [Deafen Members] permission.
///
/// [Deafen Members]: ../../model/permissions/constant.DEAFEN_MEMBERS.html
- pub fn deafen(self, deafen: bool) -> Self {
- EditMember(self.0.insert("deaf", deafen))
+ pub fn deafen(mut self, deafen: bool) -> Self {
+ self.0.insert("deaf".to_owned(), Value::Bool(deafen));
+
+ self
}
/// Whether to mute the member.
@@ -25,8 +27,10 @@ impl EditMember {
/// Requires the [Mute Members] permission.
///
/// [Mute Members]: ../../model/permissions/constant.MUTE_MEMBERS.html
- pub fn mute(self, mute: bool) -> Self {
- EditMember(self.0.insert("mute", mute))
+ pub fn mute(mut self, mute: bool) -> Self {
+ self.0.insert("mute".to_owned(), Value::Bool(mute));
+
+ self
}
/// Changes the member's nickname. Pass an empty string to reset the
@@ -35,8 +39,10 @@ impl EditMember {
/// Requires the [Manage Nicknames] permission.
///
/// [Manage Nicknames]: ../../model/permissions/constant.MANAGE_NICKNAMES.html
- pub fn nickname(self, nickname: &str) -> Self {
- EditMember(self.0.insert("nick", nickname))
+ pub fn nickname(mut self, nickname: &str) -> Self {
+ self.0.insert("nick".to_owned(), Value::String(nickname.to_owned()));
+
+ self
}
/// Set the list of roles that the member should have.
@@ -44,10 +50,12 @@ impl EditMember {
/// Requires the [Manage Roles] permission to modify.
///
/// [Manage Roles]: ../../model/permissions/constant.MANAGE_ROLES.html
- pub fn roles(self, roles: &[RoleId]) -> Self {
- EditMember(self.0
- .insert_array("roles",
- |a| roles.iter().fold(a, |a, id| a.push(id.0))))
+ pub fn roles(mut self, roles: &[RoleId]) -> Self {
+ let role_ids = roles.iter().map(|x| Value::Number(Number::from(x.0))).collect();
+
+ self.0.insert("roles".to_owned(), Value::Array(role_ids));
+
+ self
}
/// The Id of the voice channel to move the member to.
@@ -55,13 +63,9 @@ impl EditMember {
/// Requires the [Move Members] permission.
///
/// [Move Members]: ../../model/permissions/constant.MOVE_MEMBERS.html
- pub fn voice_channel<C: Into<ChannelId>>(self, channel_id: C) -> Self {
- EditMember(self.0.insert("channel_id", channel_id.into().0))
- }
-}
+ pub fn voice_channel<C: Into<ChannelId>>(mut self, channel_id: C) -> Self {
+ self.0.insert("channel_id".to_owned(), Value::Number(Number::from(channel_id.into().0)));
-impl Default for EditMember {
- fn default() -> EditMember {
- EditMember(ObjectBuilder::new())
+ self
}
}
diff --git a/src/utils/builder/edit_profile.rs b/src/utils/builder/edit_profile.rs
index 83f1da2..680a371 100644
--- a/src/utils/builder/edit_profile.rs
+++ b/src/utils/builder/edit_profile.rs
@@ -1,12 +1,11 @@
-use serde_json::builder::ObjectBuilder;
-use serde_json::Value;
-use std::default::Default;
+use ::internal::prelude::*;
/// A builder to edit the current user's settings, to be used in conjunction
/// with [`Context::edit_profile`].
///
/// [`Context::edit_profile`]: ../../client/struct.Context.html#method.edit_profile
-pub struct EditProfile(pub ObjectBuilder);
+#[derive(Default)]
+pub struct EditProfile(pub JsonMap);
impl EditProfile {
/// Sets the avatar of the current user. `None` can be passed to remove an
@@ -33,11 +32,12 @@ impl EditProfile {
/// ```
///
/// [`utils::read_image`]: ../fn.read_image.html
- pub fn avatar(self, icon: Option<&str>) -> Self {
- EditProfile(self.0
- .insert("avatar",
- icon.map_or_else(|| Value::Null,
- |x| Value::String(x.to_owned()))))
+ pub fn avatar(mut self, avatar: Option<&str>) -> Self {
+ let avatar = avatar.map_or(Value::Null, |x| Value::String(x.to_owned()));
+
+ self.0.insert("avatar".to_owned(), avatar);
+
+ self
}
/// Modifies the current user's email address.
@@ -50,8 +50,10 @@ impl EditProfile {
/// **Note**: This can only be used by user accounts.
///
/// [provided]: #method.password
- pub fn email(self, email: &str) -> Self {
- EditProfile(self.0.insert("email", email))
+ pub fn email(mut self, email: &str) -> Self {
+ self.0.insert("email".to_owned(), Value::String(email.to_owned()));
+
+ self
}
/// Modifies the current user's password.
@@ -60,8 +62,10 @@ impl EditProfile {
/// [provided].
///
/// [provided]: #method.password
- pub fn new_password(self, new_password: &str) -> Self {
- EditProfile(self.0.insert("new_password", new_password))
+ pub fn new_password(mut self, new_password: &str) -> Self {
+ self.0.insert("new_password".to_owned(), Value::String(new_password.to_owned()));
+
+ self
}
/// Used for providing the current password as verification when
@@ -69,8 +73,10 @@ impl EditProfile {
///
/// [modifying the password]: #method.new_password
/// [modifying the associated email address]: #method.email
- pub fn password(self, password: &str) -> Self {
- EditProfile(self.0.insert("password", password))
+ pub fn password(mut self, password: &str) -> Self {
+ self.0.insert("password".to_owned(), Value::String(password.to_owned()));
+
+ self
}
/// Modifies the current user's username.
@@ -79,13 +85,9 @@ impl EditProfile {
/// and current discriminator, a new unique discriminator will be assigned.
/// If there are no available discriminators with the requested username,
/// an error will occur.
- pub fn username(self, username: &str) -> Self {
- EditProfile(self.0.insert("username", username))
- }
-}
+ pub fn username(mut self, username: &str) -> Self {
+ self.0.insert("username".to_owned(), Value::String(username.to_owned()));
-impl Default for EditProfile {
- fn default() -> EditProfile {
- EditProfile(ObjectBuilder::new())
+ self
}
}
diff --git a/src/utils/builder/edit_role.rs b/src/utils/builder/edit_role.rs
index e9b86e9..de8efc7 100644
--- a/src/utils/builder/edit_role.rs
+++ b/src/utils/builder/edit_role.rs
@@ -1,5 +1,5 @@
-use serde_json::builder::ObjectBuilder;
use std::default::Default;
+use ::internal::prelude::*;
use ::model::{Permissions, Role, permissions};
/// A builer to create or edit a [`Role`] for use via a number of model and
@@ -31,53 +31,67 @@ use ::model::{Permissions, Role, permissions};
/// [`Guild::create_role`]: ../../model/struct.Guild.html#method.create_role
/// [`Role`]: ../../model/struct.Role.html
/// [`Role::edit`]: ../../model/struct.Role.html#method.edit
-pub struct EditRole(pub ObjectBuilder);
+pub struct EditRole(pub JsonMap);
impl EditRole {
/// Creates a new builder with the values of the given [`Role`].
///
/// [`Role`]: ../../model/struct.Role.html
pub fn new(role: &Role) -> Self {
- EditRole(ObjectBuilder::new()
- .insert("color", role.colour.0)
- .insert("hoist", role.hoist)
- .insert("managed", role.managed)
- .insert("mentionable", role.mentionable)
- .insert("name", &role.name)
- .insert("permissions", role.permissions.bits())
- .insert("position", role.position))
+ let mut map = Map::new();
+ map.insert("color".to_owned(), Value::Number(Number::from(role.colour.0)));
+ map.insert("hoist".to_owned(), Value::Bool(role.hoist));
+ map.insert("managed".to_owned(), Value::Bool(role.managed));
+ map.insert("mentionable".to_owned(), Value::Bool(role.mentionable));
+ map.insert("name".to_owned(), Value::String(role.name.clone()));
+ map.insert("permissions".to_owned(), Value::Number(Number::from(role.permissions.bits())));
+ map.insert("position".to_owned(), Value::Number(Number::from(role.position)));
+
+ EditRole(map)
}
/// Sets the colour of the role.
- pub fn colour(self, colour: u64) -> Self {
- EditRole(self.0.insert("color", colour))
+ pub fn colour(mut self, colour: u64) -> Self {
+ self.0.insert("color".to_owned(), Value::Number(Number::from(colour)));
+
+ self
}
/// Whether or not to hoist the role above lower-positioned role in the user
/// list.
- pub fn hoist(self, hoist: bool) -> Self {
- EditRole(self.0.insert("hoist", hoist))
+ pub fn hoist(mut self, hoist: bool) -> Self {
+ self.0.insert("hoist".to_owned(), Value::Bool(hoist));
+
+ self
}
/// Whether or not to make the role mentionable, notifying its users.
- pub fn mentionable(self, mentionable: bool) -> Self {
- EditRole(self.0.insert("mentionable", mentionable))
+ pub fn mentionable(mut self, mentionable: bool) -> Self {
+ self.0.insert("mentionable".to_owned(), Value::Bool(mentionable));
+
+ self
}
/// The name of the role to set.
- pub fn name(self, name: &str) -> Self {
- EditRole(self.0.insert("name", name))
+ pub fn name(mut self, name: &str) -> Self {
+ self.0.insert("name".to_owned(), Value::String(name.to_owned()));
+
+ self
}
/// The set of permissions to assign the role.
- pub fn permissions(self, permissions: Permissions) -> Self {
- EditRole(self.0.insert("permissions", permissions.bits()))
+ pub fn permissions(mut self, permissions: Permissions) -> Self {
+ self.0.insert("permissions".to_owned(), Value::Number(Number::from(permissions.bits())));
+
+ self
}
/// The position to assign the role in the role list. This correlates to the
/// role's position in the user list.
- pub fn position(self, position: u8) -> Self {
- EditRole(self.0.insert("position", position))
+ pub fn position(mut self, position: u8) -> Self {
+ self.0.insert("position".to_owned(), Value::Number(Number::from(position)));
+
+ self
}
}
@@ -95,12 +109,16 @@ impl Default for EditRole {
///
/// [general permissions set]: ../../model/permissions/fn.general.html
fn default() -> EditRole {
- EditRole(ObjectBuilder::new()
- .insert("color", 10070709)
- .insert("hoist", false)
- .insert("mentionable", false)
- .insert("name", "new role".to_owned())
- .insert("permissions", permissions::general().bits())
- .insert("position", 1))
+ let mut map = Map::new();
+ let permissions = Number::from(permissions::general().bits());
+
+ map.insert("color".to_owned(), Value::Number(Number::from(10070709)));
+ map.insert("hoist".to_owned(), Value::Bool(false));
+ map.insert("mentionable".to_owned(), Value::Bool(false));
+ map.insert("name".to_owned(), Value::String("new role".to_owned()));
+ map.insert("permissions".to_owned(), Value::Number(permissions));
+ map.insert("position".to_owned(), Value::Number(Number::from(1)));
+
+ EditRole(map)
}
}
diff --git a/src/utils/builder/execute_webhook.rs b/src/utils/builder/execute_webhook.rs
index 073dcb3..5e79f31 100644
--- a/src/utils/builder/execute_webhook.rs
+++ b/src/utils/builder/execute_webhook.rs
@@ -1,6 +1,6 @@
-use serde_json::builder::ObjectBuilder;
use serde_json::Value;
use std::default::Default;
+use ::internal::prelude::*;
/// A builder to create the inner content of a [`Webhook`]'s execution.
///
@@ -52,12 +52,14 @@ use std::default::Default;
/// [`Webhook`]: ../../model/struct.Webhook.html
/// [`Webhook::execute`]: ../../model/struct.Webhook.html#method.execute
/// [`execute_webhook`]: ../../client/rest/fn.execute_webhook.html
-pub struct ExecuteWebhook(pub ObjectBuilder);
+pub struct ExecuteWebhook(pub JsonMap);
impl ExecuteWebhook {
/// Override the default avatar of the webhook with an image URL.
- pub fn avatar_url(self, avatar_url: &str) -> Self {
- ExecuteWebhook(self.0.insert("avatar_url", avatar_url))
+ pub fn avatar_url(mut self, avatar_url: &str) -> Self {
+ self.0.insert("avatar_url".to_owned(), Value::String(avatar_url.to_owned()));
+
+ self
}
/// Set the content of the message.
@@ -66,8 +68,10 @@ impl ExecuteWebhook {
/// omitted.
///
/// [`embeds`]: #method.embeds
- pub fn content(self, content: &str) -> Self {
- ExecuteWebhook(self.0.insert("content", content))
+ pub fn content(mut self, content: &str) -> Self {
+ self.0.insert("content".to_owned(), Value::String(content.to_owned()));
+
+ self
}
/// Set the embeds associated with the message.
@@ -83,20 +87,26 @@ impl ExecuteWebhook {
/// [`Embed::fake`]: ../../model/struct.Embed.html#method.fake
/// [`Webhook::execute`]: ../../model/struct.Webhook.html#method.execute
/// [struct-level documentation]: #examples
- pub fn embeds(self, embeds: Vec<Value>) -> Self {
- ExecuteWebhook(self.0.insert("embeds", embeds))
+ pub fn embeds(mut self, embeds: Vec<Value>) -> Self {
+ self.0.insert("embeds".to_owned(), Value::Array(embeds));
+
+ self
}
/// Whether the message is a text-to-speech message.
///
/// Think carefully before setting this to `true`.
- pub fn tts(self, tts: bool) -> Self {
- ExecuteWebhook(self.0.insert("tts", tts))
+ pub fn tts(mut self, tts: bool) -> Self {
+ self.0.insert("tts".to_owned(), Value::Bool(tts));
+
+ self
}
/// Override the default username of the webhook.
- pub fn username(self, username: &str) -> Self {
- ExecuteWebhook(self.0.insert("username", username))
+ pub fn username(mut self, username: &str) -> Self {
+ self.0.insert("username".to_owned(), Value::String(username.to_owned()));
+
+ self
}
}
@@ -110,6 +120,9 @@ impl Default for ExecuteWebhook {
/// [`Webhook`]: ../../model/struct.Webhook.html
/// [`tts`]: #method.tts
fn default() -> ExecuteWebhook {
- ExecuteWebhook(ObjectBuilder::new().insert("tts", false))
+ let mut map = Map::new();
+ map.insert("tts".to_owned(), Value::Bool(false));
+
+ ExecuteWebhook(map)
}
}