tulpje-cache 0.4.0

A redis cache for twilight
Documentation
use twilight_model::gateway::payload::incoming::{
    GuildScheduledEventCreate, GuildScheduledEventDelete, GuildScheduledEventUpdate,
    GuildScheduledEventUserAdd, GuildScheduledEventUserRemove,
};

use crate::{Error, UpdateCache};

impl UpdateCache for GuildScheduledEventCreate {
    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
        cache
            .cache_guild_scheduled_event(self.guild_id, &self.0)
            .await
    }
}

impl UpdateCache for GuildScheduledEventDelete {
    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
        cache.scheduled_events.remove(&self.id).await?;
        cache
            .guild_scheduled_events
            .remove(&self.guild_id, &self.id)
            .await?;

        Ok(())
    }
}

impl UpdateCache for GuildScheduledEventUpdate {
    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
        cache
            .cache_guild_scheduled_event(self.guild_id, &self.0)
            .await
    }
}

impl UpdateCache for GuildScheduledEventUserAdd {
    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
        if let Some(mut event) = cache
            .scheduled_events
            .get(&self.guild_scheduled_event_id)
            .await?
        {
            event.user_count = event.user_count.map(|count| count.saturating_add(1));
            cache
                .scheduled_events
                .insert(&self.guild_scheduled_event_id, &event)
                .await?;
        }

        Ok(())
    }
}

impl UpdateCache for GuildScheduledEventUserRemove {
    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
        if let Some(mut event) = cache
            .scheduled_events
            .get(&self.guild_scheduled_event_id)
            .await?
        {
            event.user_count = event.user_count.map(|count| count.saturating_sub(1));
            cache
                .scheduled_events
                .insert(&self.guild_scheduled_event_id, &event)
                .await?;
        }

        Ok(())
    }
}