#[cfg(feature = "messenger")]
mod events;
mod user;
#[cfg(feature = "messenger")]
pub use events::EventCache;
pub use user::UserCache;
use crate::User;
#[derive(Debug)]
pub struct Cache {
user: UserCache,
#[cfg(feature = "messenger")]
events: EventCache,
}
pub trait CacheUpdate {
type Output;
fn update(&mut self, cache: &Cache) -> Option<Self::Output>;
}
impl Cache {
pub fn new() -> Self {
Self {
user: UserCache::new(None),
#[cfg(feature = "messenger")]
events: EventCache::new(),
}
}
pub fn with_user(user: Option<User>) -> Self {
Self {
user: UserCache::new(user),
#[cfg(feature = "messenger")]
events: EventCache::new(),
}
}
pub fn user(&self) -> Option<User> {
self.user.get()
}
pub fn set_user(&self, user: User) {
self.user.set(user);
}
#[cfg(feature = "messenger")]
pub fn messages(&self) -> Vec<crate::Message> {
self.events.messages()
}
#[cfg(feature = "messenger")]
pub fn update(&self, event: &mut rustybook_messenger::Event) {
let _ = event.update(self);
}
#[cfg(feature = "messenger")]
pub(crate) fn push_message(&self, message: crate::Message) {
self.events.push_message(message);
}
}
impl Default for Cache {
fn default() -> Self {
Self::new()
}
}