diff options
| author | acdenisSK <[email protected]> | 2018-01-02 18:34:27 +0100 |
|---|---|---|
| committer | acdenisSK <[email protected]> | 2018-01-02 18:34:27 +0100 |
| commit | 26fe139363a847542bbe609fe4d15accbf4fef14 (patch) | |
| tree | e0f0bbcb1d70b9905235366e86c21acac49dadd9 /src/builder | |
| parent | Remove builder re-export in utils (diff) | |
| download | serenity-26fe139363a847542bbe609fe4d15accbf4fef14.tar.xz serenity-26fe139363a847542bbe609fe4d15accbf4fef14.zip | |
Move `VecMap` to `utils`
This also fixes no-builder compilation
Diffstat (limited to 'src/builder')
| -rw-r--r-- | src/builder/create_embed.rs | 2 | ||||
| -rw-r--r-- | src/builder/create_invite.rs | 2 | ||||
| -rw-r--r-- | src/builder/create_message.rs | 4 | ||||
| -rw-r--r-- | src/builder/edit_channel.rs | 2 | ||||
| -rw-r--r-- | src/builder/edit_guild.rs | 2 | ||||
| -rw-r--r-- | src/builder/edit_member.rs | 2 | ||||
| -rw-r--r-- | src/builder/edit_profile.rs | 2 | ||||
| -rw-r--r-- | src/builder/edit_role.rs | 2 | ||||
| -rw-r--r-- | src/builder/execute_webhook.rs | 2 | ||||
| -rw-r--r-- | src/builder/get_messages.rs | 2 | ||||
| -rw-r--r-- | src/builder/mod.rs | 2 | ||||
| -rw-r--r-- | src/builder/vec_map.rs | 120 |
12 files changed, 11 insertions, 133 deletions
diff --git a/src/builder/create_embed.rs b/src/builder/create_embed.rs index fa8e12b..07f803a 100644 --- a/src/builder/create_embed.rs +++ b/src/builder/create_embed.rs @@ -22,7 +22,7 @@ use serde_json::Value; use std::default::Default; use std::fmt::Display; use utils; -use super::VecMap; +use utils::VecMap; #[cfg(feature = "utils")] use utils::Colour; diff --git a/src/builder/create_invite.rs b/src/builder/create_invite.rs index 1e8a7b7..b3344cc 100644 --- a/src/builder/create_invite.rs +++ b/src/builder/create_invite.rs @@ -1,7 +1,7 @@ use internal::prelude::*; use serde_json::Value; use std::default::Default; -use super::VecMap; +use utils::VecMap; /// A builder to create a [`RichInvite`] for use via [`GuildChannel::create_invite`]. /// diff --git a/src/builder/create_message.rs b/src/builder/create_message.rs index 4e1bd4b..2a89c0b 100644 --- a/src/builder/create_message.rs +++ b/src/builder/create_message.rs @@ -1,8 +1,8 @@ use internal::prelude::*; use model::channel::ReactionType; use std::fmt::Display; -use super::{CreateEmbed, VecMap}; -use utils; +use super::CreateEmbed; +use utils::{self, VecMap}; /// A builder to specify the contents of an [`http::send_message`] request, /// primarily meant for use through [`ChannelId::send_message`]. diff --git a/src/builder/edit_channel.rs b/src/builder/edit_channel.rs index fca9a51..17df18d 100644 --- a/src/builder/edit_channel.rs +++ b/src/builder/edit_channel.rs @@ -1,5 +1,5 @@ use internal::prelude::*; -use super::VecMap; +use utils::VecMap; /// A builder to edit a [`GuildChannel`] for use via [`GuildChannel::edit`] /// diff --git a/src/builder/edit_guild.rs b/src/builder/edit_guild.rs index bb03c53..ee6bce6 100644 --- a/src/builder/edit_guild.rs +++ b/src/builder/edit_guild.rs @@ -1,6 +1,6 @@ use internal::prelude::*; use model::prelude::*; -use super::VecMap; +use utils::VecMap; /// A builder to optionally edit certain fields of a [`Guild`]. This is meant /// for usage with [`Guild::edit`]. diff --git a/src/builder/edit_member.rs b/src/builder/edit_member.rs index f5bf2e4..efc9fb9 100644 --- a/src/builder/edit_member.rs +++ b/src/builder/edit_member.rs @@ -1,6 +1,6 @@ use internal::prelude::*; use model::id::{ChannelId, RoleId}; -use super::VecMap; +use utils::VecMap; /// A builder which edits the properties of a [`Member`], to be used in /// conjunction with [`Member::edit`]. diff --git a/src/builder/edit_profile.rs b/src/builder/edit_profile.rs index efa682f..e27fb92 100644 --- a/src/builder/edit_profile.rs +++ b/src/builder/edit_profile.rs @@ -1,5 +1,5 @@ use internal::prelude::*; -use super::VecMap; +use utils::VecMap; /// A builder to edit the current user's settings, to be used in conjunction /// with [`CurrentUser::edit`]. diff --git a/src/builder/edit_role.rs b/src/builder/edit_role.rs index 059653d..54511ec 100644 --- a/src/builder/edit_role.rs +++ b/src/builder/edit_role.rs @@ -1,7 +1,7 @@ use internal::prelude::*; use model::guild::Role; use model::Permissions; -use super::VecMap; +use utils::VecMap; /// A builer to create or edit a [`Role`] for use via a number of model methods. /// diff --git a/src/builder/execute_webhook.rs b/src/builder/execute_webhook.rs index c7d7915..26600ef 100644 --- a/src/builder/execute_webhook.rs +++ b/src/builder/execute_webhook.rs @@ -1,6 +1,6 @@ use serde_json::Value; use std::default::Default; -use super::VecMap; +use utils::VecMap; /// A builder to create the inner content of a [`Webhook`]'s execution. /// diff --git a/src/builder/get_messages.rs b/src/builder/get_messages.rs index 8b34728..01003f6 100644 --- a/src/builder/get_messages.rs +++ b/src/builder/get_messages.rs @@ -1,5 +1,5 @@ use model::id::MessageId; -use super::VecMap; +use utils::VecMap; /// Builds a request for a request to the API to retrieve messages. /// diff --git a/src/builder/mod.rs b/src/builder/mod.rs index adb44a1..3c59c0d 100644 --- a/src/builder/mod.rs +++ b/src/builder/mod.rs @@ -15,9 +15,7 @@ mod edit_profile; mod edit_role; mod execute_webhook; mod get_messages; -mod vec_map; -pub use self::vec_map::VecMap; pub use self::create_embed::{CreateEmbed, CreateEmbedAuthor, CreateEmbedFooter}; pub use self::create_invite::CreateInvite; pub use self::create_message::CreateMessage; diff --git a/src/builder/vec_map.rs b/src/builder/vec_map.rs deleted file mode 100644 index 786bf14..0000000 --- a/src/builder/vec_map.rs +++ /dev/null @@ -1,120 +0,0 @@ -// Most of this is -// shamelessly copied from https://github.com/hyperium/hyper/blob/master/src/header/internals/vec_map.rs - -/// Like `HashMap` but solely uses a vector instead. -/// -/// note: This is for internal use. -#[derive(Clone, Debug, Default)] -pub struct VecMap<K, V>(Vec<(K, V)>); - -impl<K: PartialEq, V> VecMap<K, V> { - pub fn new() -> Self { - VecMap(Vec::new()) - } - - pub fn with_capacity(cap: usize) -> Self { - VecMap(Vec::with_capacity(cap)) - } - - #[inline] - pub fn insert(&mut self, key: K, value: V) { - self.0.push((key, value)); - } - - pub fn remove<Q: ?Sized + PartialEq<K>>(&mut self, key: &Q) -> Option<V> { - self.pos(key).map(|pos| self.0.remove(pos)).map(|entry| entry.1) - } - - pub fn entry(&mut self, key: K) -> Entry<K, V> { - match self.pos(&key) { - Some(pos) => Entry::Occupied(OccupiedEntry { - vec: &mut self.0, - pos: pos, - }), - None => Entry::Vacant(VacantEntry { - vec: &mut self.0, - key: key, - }) - } - } - - pub fn get<Q: PartialEq<K> + ?Sized>(&self, key: &Q) -> Option<&V> { - self.iter().find(|entry| key == &entry.0).map(|entry| &entry.1) - } - - #[inline] - pub fn iter(&self) -> ::std::slice::Iter<(K, V)> { - self.into_iter() - } - - fn pos<Q: PartialEq<K> + ?Sized>(&self, key: &Q) -> Option<usize> { - self.iter().position(|entry| key == &entry.0) - } -} - -impl<K, V> IntoIterator for VecMap<K, V> { - type Item = (K, V); - type IntoIter = ::std::vec::IntoIter<(K, V)>; - - fn into_iter(self) -> Self::IntoIter { - self.0.into_iter() - } -} - -impl<'a, K, V> IntoIterator for &'a VecMap<K, V> { - type Item = &'a (K, V); - type IntoIter = ::std::slice::Iter<'a, (K, V)>; - - fn into_iter(self) -> Self::IntoIter { - self.0.iter() - } -} - -pub enum Entry<'a, K: 'a, V: 'a> { - Vacant(VacantEntry<'a, K, V>), - Occupied(OccupiedEntry<'a, K, V>) -} - -impl<'a, K, V> Entry<'a, K, V> { - pub fn or_insert(self, val: V) -> &'a mut V { - use self::Entry::*; - - match self { - Vacant(entry) => entry.insert(val), - Occupied(entry) => entry.into_mut(), - } - } - - pub fn or_insert_with<F: FnOnce() -> V>(self, val: F) -> &'a mut V { - use self::Entry::*; - - match self { - Vacant(entry) => entry.insert(val()), - Occupied(entry) => entry.into_mut(), - } - } -} - -pub struct VacantEntry<'a, K: 'a, V: 'a> { - vec: &'a mut Vec<(K, V)>, - key: K, -} - -impl<'a, K, V> VacantEntry<'a, K, V> { - pub fn insert(self, val: V) -> &'a mut V { - self.vec.push((self.key, val)); - let pos = self.vec.len() - 1; - &mut self.vec[pos].1 - } -} - -pub struct OccupiedEntry<'a, K: 'a, V: 'a> { - vec: &'a mut Vec<(K, V)>, - pos: usize, -} - -impl<'a, K, V> OccupiedEntry<'a, K, V> { - pub fn into_mut(self) -> &'a mut V { - &mut self.vec[self.pos].1 - } -}
\ No newline at end of file |