use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct WebsocketEventBroadcast {
pub omit_users: Option<HashMap<String, bool>>,
pub user_id: Option<String>,
#[allow(missing_docs)]
pub channel_id: String,
#[allow(missing_docs)]
pub team_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct WebsocketEvent {
pub event: WebsocketEventType,
pub data: serde_json::Value,
pub broadcast: WebsocketEventBroadcast,
pub seq: usize,
}
#[async_trait]
pub trait WebsocketHandler: Send + Sync {
async fn callback(&self, _message: WebsocketEvent) {}
}
#[allow(missing_docs)]
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum WebsocketEventType {
AddedToTeam,
AuthenticationChallenge,
ChannelConverted,
ChannelCreated,
ChannelDeleted,
ChannelMemberUpdated,
ChannelUpdated,
ChannelViewed,
ConfigChanged,
DeleteTeam,
DirectAdded,
EmojiAdded,
EphemeralMessage,
GroupAdded,
Hello,
LeaveTeam,
LicenseChanged,
MemberroleUpdated,
NewUser,
PluginDisabled,
PluginEnabled,
PluginStatusesChanged,
PostDeleted,
PostEdited,
PostUnread,
Posted,
PreferenceChanged,
PreferencesChanged,
PreferencesDeleted,
ReactionAdded,
ReactionRemoved,
Response,
RoleUpdated,
StatusChange,
Typing,
UpdateTeam,
UserAdded,
UserRemoved,
UserRoleUpdated,
UserUpdated,
DialogOpened,
ThreadUpdated,
ThreadFollowChanged,
ThreadReadChanged,
}