tulpje-cache 0.4.0

A redis cache for twilight
Documentation
use twilight_model::{
    channel::Channel,
    id::{Id, marker::ChannelMarker},
};

use crate::{Cache, Error};

pub use twilight_model::channel::Channel as CachedChannel;

impl Cache {
    pub(crate) async fn cache_channels(
        &self,
        channels: impl IntoIterator<Item = Channel>,
    ) -> Result<(), Error> {
        for channel in channels {
            self.cache_channel(channel).await?;
        }

        Ok(())
    }

    pub(crate) async fn cache_channel(&self, channel: Channel) -> Result<(), Error> {
        if let Some(guild_id) = channel.guild_id {
            self.guild_channels.insert(&guild_id, &channel.id).await?;
        }

        self.channels.insert(&channel.id, &channel).await?;
        Ok(())
    }

    pub(crate) async fn delete_channel(&self, channel_id: Id<ChannelMarker>) -> Result<(), Error> {
        if let Some(channel) = self.channels.get(&channel_id).await?
            && let Some(guild_id) = channel.guild_id
        {
            self.guild_channels.remove(&guild_id, &channel.id).await?;
        }

        self.channels.remove(&channel_id).await?;
        Ok(())
    }
}