Trait serenity::cache::CacheUpdate [−][src]
Trait used for updating the cache with a type.
This may be implemented on a type and used to update the cache via
Cache::update
.
Examples
Creating a custom struct implementation to update the cache with:
use serenity::{ cache::{Cache, CacheUpdate}, model::{ id::UserId, user::User, }, prelude::RwLock, }; use std::{ collections::hash_map::Entry, sync::Arc, }; // For example, an update to the user's record in the database was // published to a pubsub channel. struct DatabaseUserUpdate { user_avatar: Option<String>, user_discriminator: u16, user_id: UserId, user_is_bot: bool, user_name: String, } impl CacheUpdate for DatabaseUserUpdate { // A copy of the old user's data, if it existed in the cache. type Output = User; fn update(&mut self, cache: &mut Cache) -> Option<Self::Output> { // If an entry for the user already exists, update its fields. match cache.users.entry(self.user_id) { Entry::Occupied(entry) => { let user = entry.get(); let mut writer = user.write(); let old = writer.clone(); writer.bot = self.user_is_bot; writer.discriminator = self.user_discriminator; writer.id = self.user_id; if writer.avatar != self.user_avatar { writer.avatar = self.user_avatar.clone(); } if writer.name != self.user_name { writer.name = self.user_name.clone(); } // Return the old copy for the user's sake. Some(old) }, Entry::Vacant(entry) => { entry.insert(Arc::new(RwLock::new(User { id: self.user_id, avatar: self.user_avatar.clone(), bot: self.user_is_bot, discriminator: self.user_discriminator, name: self.user_name.clone(), }))); // There was no old copy, so return None. None }, } } } // Create an instance of the cache. let mut cache = Cache::new(); // This is a sample pubsub message that you might receive from your // database. let mut update_message = DatabaseUserUpdate { user_avatar: None, user_discriminator: 6082, user_id: UserId(379740138303127564), user_is_bot: true, user_name: "TofuBot".to_owned(), }; // Update the cache with the message. cache.update(&mut update_message);
Associated Types
type Output
The return type of an update.
If there is nothing to return, specify this type as an unit (()
).
Required Methods
fn update(&mut self, _: &mut Cache) -> Option<Self::Output>
Updates the cache with the implementation.
Implementors
impl CacheUpdate for ChannelCreateEvent type Output = Channel;
impl CacheUpdate for ChannelDeleteEvent type Output = ();
impl CacheUpdate for ChannelPinsUpdateEvent type Output = ();
impl CacheUpdate for ChannelRecipientAddEvent type Output = ();
impl CacheUpdate for ChannelRecipientRemoveEvent type Output = ();
impl CacheUpdate for ChannelUpdateEvent type Output = ();
impl CacheUpdate for GuildCreateEvent type Output = ();
impl CacheUpdate for GuildDeleteEvent type Output = Arc<RwLock<Guild>>;
impl CacheUpdate for GuildEmojisUpdateEvent type Output = ();
impl CacheUpdate for GuildMemberAddEvent type Output = ();
impl CacheUpdate for GuildMemberRemoveEvent type Output = Member;
impl CacheUpdate for GuildMemberUpdateEvent type Output = Member;
impl CacheUpdate for GuildMembersChunkEvent type Output = ();
impl CacheUpdate for GuildRoleCreateEvent type Output = ();
impl CacheUpdate for GuildRoleDeleteEvent type Output = Role;
impl CacheUpdate for GuildRoleUpdateEvent type Output = Role;
impl CacheUpdate for GuildUnavailableEvent type Output = ();
impl CacheUpdate for GuildUpdateEvent type Output = ();
impl CacheUpdate for MessageCreateEvent type Output = Message;
impl CacheUpdate for MessageUpdateEvent type Output = ();
impl CacheUpdate for PresenceUpdateEvent type Output = ();
impl CacheUpdate for PresencesReplaceEvent type Output = ();
impl CacheUpdate for ReadyEvent type Output = ();
impl CacheUpdate for UserUpdateEvent type Output = CurrentUser;
impl CacheUpdate for VoiceStateUpdateEvent type Output = ();