diff options
Diffstat (limited to 'src/cache')
| -rw-r--r-- | src/cache/cache_events_impl.rs | 10 | ||||
| -rw-r--r-- | src/cache/mod.rs | 8 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/cache/cache_events_impl.rs b/src/cache/cache_events_impl.rs index 23fa314..64dbfde 100644 --- a/src/cache/cache_events_impl.rs +++ b/src/cache/cache_events_impl.rs @@ -112,6 +112,9 @@ impl CacheEventsImpl for super::Cache { let ch = self.private_channels.insert(id, channel.clone()); ch.map(Channel::Private) }, + Channel::Category(ref category) => { + self.categories.insert(category.read().unwrap().id, category.clone()).map(Channel::Category) + }, } } @@ -123,6 +126,8 @@ impl CacheEventsImpl for super::Cache { // anymore. Channel::Private(_) | Channel::Group(_) => unreachable!(), + // TODO: Fix this later. + Channel::Category(_) => unreachable!(), }; let (guild_id, channel_id) = channel.with(|channel| (channel.guild_id, channel.id)); @@ -219,6 +224,11 @@ impl CacheEventsImpl for super::Cache { .get_mut(&channel.read().unwrap().id) .map(|private| private.clone_from(channel)); }, + Channel::Category(ref category) => { + self.categories + .get_mut(&category.read().unwrap().id) + .map(|c| c.clone_from(category)); + }, } } diff --git a/src/cache/mod.rs b/src/cache/mod.rs index b92e72f..3a53262 100644 --- a/src/cache/mod.rs +++ b/src/cache/mod.rs @@ -76,6 +76,8 @@ pub struct Cache { /// [`Event::GuildUnavailable`]: ../model/event/struct.GuildUnavailableEvent.html /// [`Guild`]: ../model/struct.Guild.html pub channels: HashMap<ChannelId, Arc<RwLock<GuildChannel>>>, + /// A map of channel categories. + pub categories: HashMap<ChannelId, Arc<RwLock<ChannelCategory>>>, /// A map of the groups that the current user is in. /// /// For bot users this will always be empty, except for in [special cases]. @@ -593,6 +595,11 @@ impl Cache { self.users.get(&user_id.into()).cloned() } + #[inline] + pub fn categories<C: Into<ChannelId>>(&self, channel_id: C) -> Option<Arc<RwLock<ChannelCategory>>> { + self.categories.get(&channel_id.into()).cloned() + } + fn update_user_entry(&mut self, user: &User) { match self.users.entry(user.id) { Entry::Vacant(e) => { @@ -609,6 +616,7 @@ impl Default for Cache { fn default() -> Cache { Cache { channels: HashMap::default(), + categories: HashMap::default(), groups: HashMap::with_capacity(128), guilds: HashMap::default(), notes: HashMap::default(), |