aboutsummaryrefslogtreecommitdiff
path: root/src/builder/edit_member.rs
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-10-18 08:34:06 -0700
committerZeyla Hellyer <[email protected]>2017-10-18 08:34:06 -0700
commit9908999a6bae1585bb70b7814f13b49bf99b6c32 (patch)
treed789f716400502ae0d124933f5c4d927867e7033 /src/builder/edit_member.rs
parentFix some compilation feature targets, fix lints (diff)
downloadserenity-9908999a6bae1585bb70b7814f13b49bf99b6c32.tar.xz
serenity-9908999a6bae1585bb70b7814f13b49bf99b6c32.zip
Slightly improve performance of builders
Builders would keep a `serde_json::Map<String, Value>`, which would require re-creating owned strings for the same parameter multiple times in some cases, depending on builder defaults and keying strategies. This commit uses a `std::collections::HashMap<&'static str, Value>` internally, and moves over values to a `serde_json::Map<String, Value>` when it comes time to sending them to the appropriate `http` module function. This saves the number of heap-allocated string creations on most builders, with specific performance increase on `builder::CreateMessage` and `builder::CreateEmbed` & co.
Diffstat (limited to 'src/builder/edit_member.rs')
-rw-r--r--src/builder/edit_member.rs18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/builder/edit_member.rs b/src/builder/edit_member.rs
index 560d241..5a399f5 100644
--- a/src/builder/edit_member.rs
+++ b/src/builder/edit_member.rs
@@ -1,5 +1,6 @@
use model::{ChannelId, RoleId};
use internal::prelude::*;
+use std::collections::HashMap;
/// A builder which edits the properties of a [`Member`], to be used in
/// conjunction with [`Member::edit`].
@@ -7,7 +8,7 @@ use internal::prelude::*;
/// [`Member`]: ../model/struct.Member.html
/// [`Member::edit`]: ../model/struct.Member.html#method.edit
#[derive(Clone, Debug, Default)]
-pub struct EditMember(pub JsonMap);
+pub struct EditMember(pub HashMap<&'static str, Value>);
impl EditMember {
/// Whether to deafen the member.
@@ -16,7 +17,7 @@ impl EditMember {
///
/// [Deafen Members]: ../model/permissions/constant.DEAFEN_MEMBERS.html
pub fn deafen(mut self, deafen: bool) -> Self {
- self.0.insert("deaf".to_string(), Value::Bool(deafen));
+ self.0.insert("deaf", Value::Bool(deafen));
self
}
@@ -27,7 +28,7 @@ impl EditMember {
///
/// [Mute Members]: ../model/permissions/constant.MUTE_MEMBERS.html
pub fn mute(mut self, mute: bool) -> Self {
- self.0.insert("mute".to_string(), Value::Bool(mute));
+ self.0.insert("mute", Value::Bool(mute));
self
}
@@ -39,8 +40,7 @@ impl EditMember {
///
/// [Manage Nicknames]: ../model/permissions/constant.MANAGE_NICKNAMES.html
pub fn nickname(mut self, nickname: &str) -> Self {
- self.0
- .insert("nick".to_string(), Value::String(nickname.to_string()));
+ self.0.insert("nick", Value::String(nickname.to_string()));
self
}
@@ -56,7 +56,7 @@ impl EditMember {
.map(|x| Value::Number(Number::from(x.as_ref().0)))
.collect();
- self.0.insert("roles".to_string(), Value::Array(role_ids));
+ self.0.insert("roles", Value::Array(role_ids));
self
}
@@ -67,10 +67,8 @@ impl EditMember {
///
/// [Move Members]: ../model/permissions/constant.MOVE_MEMBERS.html
pub fn voice_channel<C: Into<ChannelId>>(mut self, channel_id: C) -> Self {
- self.0.insert(
- "channel_id".to_string(),
- Value::Number(Number::from(channel_id.into().0)),
- );
+ let num = Value::Number(Number::from(channel_id.into().0));
+ self.0.insert("channel_id", num);
self
}