diff options
| author | Zeyla Hellyer <[email protected]> | 2017-10-18 08:34:06 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-10-18 08:34:06 -0700 |
| commit | 9908999a6bae1585bb70b7814f13b49bf99b6c32 (patch) | |
| tree | d789f716400502ae0d124933f5c4d927867e7033 /src/builder/edit_member.rs | |
| parent | Fix some compilation feature targets, fix lints (diff) | |
| download | serenity-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.rs | 18 |
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 } |