use twilight_model::id::{
Id,
marker::{ChannelMarker, GuildMarker},
};
use crate::{CacheableModels, DefaultCacheModels};
use super::InMemoryCache;
#[allow(clippy::type_complexity)]
#[derive(Clone, Debug)]
pub struct InMemoryCacheStats<'a, CacheModels: CacheableModels = DefaultCacheModels>(
&'a InMemoryCache<CacheModels>,
);
impl<'a, CacheModels: CacheableModels> InMemoryCacheStats<'a, CacheModels> {
#[allow(clippy::type_complexity)]
pub(super) const fn new(cache: &'a InMemoryCache<CacheModels>) -> Self {
Self(cache)
}
#[allow(clippy::type_complexity)]
pub const fn cache_ref(&'a self) -> &'a InMemoryCache<CacheModels> {
self.0
}
#[allow(clippy::type_complexity)]
pub const fn into_cache(self) -> &'a InMemoryCache<CacheModels> {
self.0
}
pub fn channels(&self) -> usize {
self.0.channels.len()
}
pub fn channel_messages(&self, channel_id: Id<ChannelMarker>) -> Option<usize> {
let channel = self.0.channel_messages.get(&channel_id)?;
Some(channel.len())
}
pub fn channel_voice_states(&self, channel_id: Id<ChannelMarker>) -> Option<usize> {
let channel = self.0.voice_state_channels.get(&channel_id)?;
Some(channel.len())
}
pub fn emojis(&self) -> usize {
self.0.emojis.len()
}
pub fn guilds(&self) -> usize {
self.0.guilds.len()
}
pub fn guild_channels(&self, guild_id: Id<GuildMarker>) -> Option<usize> {
let guild = self.0.guild_channels.get(&guild_id)?;
Some(guild.len())
}
pub fn guild_emojis(&self, guild_id: Id<GuildMarker>) -> Option<usize> {
let guild = self.0.guild_emojis.get(&guild_id)?;
Some(guild.len())
}
pub fn guild_members(&self, guild_id: Id<GuildMarker>) -> Option<usize> {
let guild = self.0.guild_members.get(&guild_id)?;
Some(guild.len())
}
pub fn guild_presences(&self, guild_id: Id<GuildMarker>) -> Option<usize> {
let guild = self.0.guild_presences.get(&guild_id)?;
Some(guild.len())
}
pub fn guild_roles(&self, guild_id: Id<GuildMarker>) -> Option<usize> {
let guild = self.0.guild_roles.get(&guild_id)?;
Some(guild.len())
}
pub fn guild_voice_states(&self, guild_id: Id<GuildMarker>) -> Option<usize> {
let guild = self.0.voice_state_guilds.get(&guild_id)?;
Some(guild.len())
}
pub fn members(&self) -> usize {
self.0.members.len()
}
pub fn presences(&self) -> usize {
self.0.presences.len()
}
pub fn roles(&self) -> usize {
self.0.roles.len()
}
pub fn unavailable_guilds(&self) -> usize {
self.0.unavailable_guilds.len()
}
pub fn users(&self) -> usize {
self.0.users.len()
}
pub fn voice_states(&self) -> usize {
self.0.voice_states.len()
}
}
#[cfg(test)]
mod tests {
use crate::InMemoryCacheStats;
use static_assertions::assert_impl_all;
use std::fmt::Debug;
assert_impl_all!(InMemoryCacheStats<'_>: Clone, Debug, Send, Sync);
}