From 8565fa2cb356cf8cbccfeb09828c9d136ad3d614 Mon Sep 17 00:00:00 2001 From: Mei Boudreau Date: Thu, 12 Oct 2017 18:18:07 -0400 Subject: Optimize Member::roles --- src/model/guild/member.rs | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'src/model') diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs index 29172a0..20b45b8 100644 --- a/src/model/guild/member.rs +++ b/src/model/guild/member.rs @@ -361,27 +361,17 @@ impl Member { /// If role data can not be found for the member, then `None` is returned. #[cfg(feature = "cache")] pub fn roles(&self) -> Option> { - CACHE - .read() - .unwrap() - .guilds - .values() - .find(|guild| { - guild.read().unwrap().members.values().any(|m| { - m.user.read().unwrap().id == self.user.read().unwrap().id && - m.joined_at == self.joined_at - }) - }) - .map(|guild| { - guild - .read() - .unwrap() - .roles - .values() - .filter(|role| self.roles.contains(&role.id)) - .cloned() - .collect() - }) + self + .guild_id + .find() + .map(|g| g + .read() + .unwrap() + .roles + .values() + .filter(|role| self.roles.contains(&role.id)) + .cloned() + .collect()) } /// Unbans the [`User`] from the guild. -- cgit v1.2.3