[−][src]Trait serenity::cache::CacheUpdate
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
.
Info: You may not access the fields of the cache, as they are public for the crate only.
Examples
Creating a custom struct implementation to update the cache with:
ⓘThis example is not tested
use serde_json::json; 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, } #[serenity::async_trait] impl CacheUpdate for DatabaseUserUpdate { // A copy of the old user's data, if it existed in the cache. type Output = User; async fn update(&mut self, cache: &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 old_user = user.clone(); user.bot = self.user_is_bot; user.discriminator = self.user_discriminator; user.id = self.user_id; if user.avatar != self.user_avatar { user.avatar = self.user_avatar.clone(); } if user.name != self.user_name { user.name = self.user_name.clone(); } // Return the old copy for the user's sake. Some(old_user) }, Entry::Vacant(entry) => { // We can convert a `serde_json::Value` to a User for test // purposes. let user = serde_json::from_value::<User>(json!({ "id": self.user_id, "avatar": self.user_avatar.clone(), "bot": self.user_is_bot, "discriminator": self.user_discriminator, "username": self.user_name.clone(), })).expect("Error making user"); entry.insert(user); // 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).await;
Associated Types
type Output
The return type of an update.
If there is nothing to return, specify this type as an unit (()
).
Required methods
#[must_use]fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
__arg1: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
&'life0 mut self,
__arg1: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Updates the cache with the implementation.
Implementors
impl CacheUpdate for ChannelCreateEvent
[src]
type Output = Channel
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for ChannelDeleteEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for ChannelPinsUpdateEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for ChannelUpdateEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildCreateEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildDeleteEvent
[src]
type Output = Guild
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildEmojisUpdateEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildMemberAddEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildMemberRemoveEvent
[src]
type Output = Member
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildMemberUpdateEvent
[src]
type Output = Member
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildMembersChunkEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildRoleCreateEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildRoleDeleteEvent
[src]
type Output = Role
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildRoleUpdateEvent
[src]
type Output = Role
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildUnavailableEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for GuildUpdateEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for MessageCreateEvent
[src]
type Output = Message
The oldest message, if the channel's message cache was already full.
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for MessageUpdateEvent
[src]
type Output = Message
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for PresenceUpdateEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for PresencesReplaceEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for ReadyEvent
[src]
type Output = ()
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<()>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
impl CacheUpdate for UserUpdateEvent
[src]
type Output = CurrentUser
fn update<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
[src]
&'life0 mut self,
cache: &'life1 Cache
) -> Pin<Box<dyn Future<Output = Option<Self::Output>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,