forked from jmug/stoatchat
48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
use serde_json::{json, Value};
|
|
|
|
pub mod groups;
|
|
pub mod guilds;
|
|
pub mod message;
|
|
pub mod users;
|
|
|
|
#[allow(non_camel_case_types)]
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
pub enum Notification {
|
|
message_create(message::Create),
|
|
message_edit(message::Edit),
|
|
message_delete(message::Delete),
|
|
group_user_join(groups::UserJoin),
|
|
group_user_leave(groups::UserLeave),
|
|
guild_user_join(guilds::UserJoin),
|
|
guild_user_leave(guilds::UserLeave),
|
|
guild_channel_create(guilds::ChannelCreate),
|
|
guild_channel_delete(guilds::ChannelDelete),
|
|
guild_delete(guilds::Delete),
|
|
user_friend_status(users::FriendStatus),
|
|
}
|
|
|
|
impl Notification {
|
|
pub fn serialize(self) -> String {
|
|
if let Value::Object(obj) = json!(self) {
|
|
let (key, value) = obj.iter().next().unwrap();
|
|
|
|
if let Value::Object(data) = value {
|
|
let mut data = data.clone();
|
|
data.insert("type".to_string(), Value::String(key.to_string()));
|
|
json!(data).to_string()
|
|
} else {
|
|
unreachable!()
|
|
}
|
|
} else {
|
|
unreachable!()
|
|
}
|
|
}
|
|
|
|
pub fn push_to_cache(&self) {
|
|
crate::database::channel::process_event(&self);
|
|
crate::database::guild::process_event(&self);
|
|
crate::database::user::process_event(&self);
|
|
}
|
|
}
|