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/cache/mod.rs | 52 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 9 deletions(-) (limited to 'src/cache') diff --git a/src/cache/mod.rs b/src/cache/mod.rs index 2bbc9bc..def6ac4 100644 --- a/src/cache/mod.rs +++ b/src/cache/mod.rs @@ -298,8 +298,10 @@ impl Cache { /// [`groups`]: #structfield.groups /// [`private_channels`]: #structfield.private_channels pub fn channel>(&self, id: C) -> Option { - let id = id.into(); + self._channel(id.into()) + } + fn _channel(&self, id: ChannelId) -> Option { if let Some(channel) = self.channels.get(&id) { return Some(Channel::Guild(channel.clone())); } @@ -346,7 +348,11 @@ impl Cache { /// ``` #[inline] pub fn guild>(&self, id: G) -> Option>> { - self.guilds.get(&id.into()).cloned() + self._guild(id.into()) + } + + fn _guild(&self, id: GuildId) -> Option>> { + self.guilds.get(&id).cloned() } /// Retrieves a reference to a [`Guild`]'s channel. Unlike [`channel`], @@ -395,7 +401,11 @@ impl Cache { /// [`channel`]: #method.channel #[inline] pub fn guild_channel>(&self, id: C) -> Option>> { - self.channels.get(&id.into()).cloned() + self._guild_channel(id.into()) + } + + fn _guild_channel(&self, id: ChannelId) -> Option>> { + self.channels.get(&id).cloned() } /// Retrieves a reference to a [`Group`] from the cache based on the given @@ -431,7 +441,11 @@ impl Cache { /// ``` #[inline] pub fn group>(&self, id: C) -> Option>> { - self.groups.get(&id.into()).cloned() + self._group(id.into()) + } + + fn _group(&self, id: ChannelId) -> Option>> { + self.groups.get(&id).cloned() } /// Retrieves a [`Guild`]'s member from the cache based on the guild's and @@ -481,6 +495,10 @@ impl Cache { /// [`members`]: ../model/struct.Guild.html#structfield.members pub fn member(&self, guild_id: G, user_id: U) -> Option where G: Into, U: Into { + self._member(guild_id.into(), user_id.into()) + } + + fn _member(&self, guild_id: GuildId, user_id: UserId) -> Option { self.guilds.get(&guild_id.into()).and_then(|guild| { guild.read().unwrap().members.get(&user_id.into()).cloned() }) @@ -518,7 +536,11 @@ impl Cache { pub fn private_channel>(&self, channel_id: C) -> Option>> { - self.private_channels.get(&channel_id.into()).cloned() + self._private_channel(channel_id.into()) + } + + fn _private_channel(&self, channel_id: ChannelId) -> Option>> { + self.private_channels.get(&channel_id).cloned() } /// Retrieves a [`Guild`]'s role by their Ids. @@ -553,9 +575,13 @@ impl Cache { /// ``` pub fn role(&self, guild_id: G, role_id: R) -> Option where G: Into, R: Into { + self._role(guild_id.into(), role_id.into()) + } + + fn _role(&self, guild_id: GuildId, role_id: RoleId) -> Option { self.guilds - .get(&guild_id.into()) - .and_then(|g| g.read().unwrap().roles.get(&role_id.into()).cloned()) + .get(&guild_id) + .and_then(|g| g.read().unwrap().roles.get(&role_id).cloned()) } /// Retrieves a `User` from the cache's [`users`] map, if it exists. @@ -590,14 +616,22 @@ impl Cache { /// ``` #[inline] pub fn user>(&self, user_id: U) -> Option>> { - self.users.get(&user_id.into()).cloned() + self._user(user_id.into()) + } + + fn _user(&self, user_id: UserId) -> Option>> { + self.users.get(&user_id).cloned() } #[inline] pub fn categories>(&self, channel_id: C) -> Option>> { - self.categories.get(&channel_id.into()).cloned() + self._categories(channel_id.into()) + } + + fn _categories(&self, channel_id: ChannelId) -> Option>> { + self.categories.get(&channel_id).cloned() } #[cfg(feature = "client")] -- cgit v1.2.3