tulpje_cache/event/
guild_scheduled_event.rs

1use twilight_model::gateway::payload::incoming::{
2    GuildScheduledEventCreate, GuildScheduledEventDelete, GuildScheduledEventUpdate,
3    GuildScheduledEventUserAdd, GuildScheduledEventUserRemove,
4};
5
6use crate::{Error, UpdateCache};
7
8impl UpdateCache for GuildScheduledEventCreate {
9    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
10        cache
11            .cache_guild_scheduled_event(self.guild_id, &self.0)
12            .await
13    }
14}
15
16impl UpdateCache for GuildScheduledEventDelete {
17    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
18        cache.scheduled_events.remove(&self.id).await?;
19        cache
20            .guild_scheduled_events
21            .remove(&self.guild_id, &self.id)
22            .await?;
23
24        Ok(())
25    }
26}
27
28impl UpdateCache for GuildScheduledEventUpdate {
29    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
30        cache
31            .cache_guild_scheduled_event(self.guild_id, &self.0)
32            .await
33    }
34}
35
36impl UpdateCache for GuildScheduledEventUserAdd {
37    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
38        if let Some(mut event) = cache
39            .scheduled_events
40            .get(&self.guild_scheduled_event_id)
41            .await?
42        {
43            event.user_count = event.user_count.map(|count| count.saturating_add(1));
44            cache
45                .scheduled_events
46                .insert(&self.guild_scheduled_event_id, &event)
47                .await?;
48        }
49
50        Ok(())
51    }
52}
53
54impl UpdateCache for GuildScheduledEventUserRemove {
55    async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
56        if let Some(mut event) = cache
57            .scheduled_events
58            .get(&self.guild_scheduled_event_id)
59            .await?
60        {
61            event.user_count = event.user_count.map(|count| count.saturating_sub(1));
62            cache
63                .scheduled_events
64                .insert(&self.guild_scheduled_event_id, &event)
65                .await?;
66        }
67
68        Ok(())
69    }
70}