181 lines
4.1 KiB
Rust
181 lines
4.1 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::models::channel::{FieldsChannel, PartialChannel};
|
|
use crate::models::message::{AppendMessage, PartialMessage};
|
|
use crate::models::server::{FieldsRole, FieldsServer, PartialRole, PartialServer};
|
|
use crate::models::server_member::{FieldsMember, MemberCompositeKey, PartialMember};
|
|
use crate::models::user::{FieldsUser, PartialUser, RelationshipStatus};
|
|
use crate::models::{Channel, Emoji, Member, Message, Server, User, UserSettings};
|
|
use crate::Error;
|
|
|
|
/// WebSocket Client Errors
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
#[serde(tag = "error")]
|
|
pub enum WebSocketError {
|
|
LabelMe,
|
|
InternalError { at: String },
|
|
InvalidSession,
|
|
OnboardingNotFinished,
|
|
AlreadyAuthenticated,
|
|
MalformedData { msg: String },
|
|
}
|
|
|
|
/// Ping Packet
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
#[serde(untagged)]
|
|
pub enum Ping {
|
|
Binary(Vec<u8>),
|
|
Number(usize),
|
|
}
|
|
|
|
/// Untagged Error
|
|
#[derive(Serialize)]
|
|
#[serde(untagged)]
|
|
pub enum ErrorEvent {
|
|
Error(WebSocketError),
|
|
APIError(Error),
|
|
}
|
|
|
|
/// Protocol Events
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
#[serde(tag = "type")]
|
|
pub enum EventV1 {
|
|
/// Multiple events
|
|
Bulk { v: Vec<EventV1> },
|
|
|
|
/// Successfully authenticated
|
|
Authenticated,
|
|
|
|
/// Basic data to cache
|
|
Ready {
|
|
users: Vec<User>,
|
|
servers: Vec<Server>,
|
|
channels: Vec<Channel>,
|
|
members: Vec<Member>,
|
|
emojis: Option<Vec<Emoji>>,
|
|
},
|
|
|
|
/// Ping response
|
|
Pong { data: Ping },
|
|
|
|
/// New message
|
|
Message(Message),
|
|
|
|
/// Update existing message
|
|
MessageUpdate {
|
|
id: String,
|
|
channel: String,
|
|
data: PartialMessage,
|
|
},
|
|
|
|
/// Append information to existing message
|
|
MessageAppend {
|
|
id: String,
|
|
channel: String,
|
|
append: AppendMessage,
|
|
},
|
|
|
|
/// Delete message
|
|
MessageDelete { id: String, channel: String },
|
|
|
|
/// Bulk delete messages
|
|
BulkMessageDelete { channel: String, ids: Vec<String> },
|
|
|
|
/// New channel
|
|
ChannelCreate(Channel),
|
|
|
|
/// Update existing channel
|
|
ChannelUpdate {
|
|
id: String,
|
|
data: PartialChannel,
|
|
clear: Vec<FieldsChannel>,
|
|
},
|
|
|
|
/// Delete channel
|
|
ChannelDelete { id: String },
|
|
|
|
/// User joins a group
|
|
ChannelGroupJoin { id: String, user: String },
|
|
|
|
/// User leaves a group
|
|
ChannelGroupLeave { id: String, user: String },
|
|
|
|
/// User started typing in a channel
|
|
ChannelStartTyping { id: String, user: String },
|
|
|
|
/// User stopped typing in a channel
|
|
ChannelStopTyping { id: String, user: String },
|
|
|
|
/// User acknowledged message in channel
|
|
ChannelAck {
|
|
id: String,
|
|
user: String,
|
|
message_id: String,
|
|
},
|
|
|
|
/// New server
|
|
ServerCreate {
|
|
id: String,
|
|
server: Server,
|
|
channels: Vec<Channel>,
|
|
},
|
|
|
|
/// Update existing server
|
|
ServerUpdate {
|
|
id: String,
|
|
data: PartialServer,
|
|
clear: Vec<FieldsServer>,
|
|
},
|
|
|
|
/// Delete server
|
|
ServerDelete { id: String },
|
|
|
|
/// Update existing server member
|
|
ServerMemberUpdate {
|
|
id: MemberCompositeKey,
|
|
data: PartialMember,
|
|
clear: Vec<FieldsMember>,
|
|
},
|
|
|
|
/// User joins server
|
|
ServerMemberJoin { id: String, user: String },
|
|
|
|
/// User left server
|
|
ServerMemberLeave { id: String, user: String },
|
|
|
|
/// Server role created or updated
|
|
ServerRoleUpdate {
|
|
id: String,
|
|
role_id: String,
|
|
data: PartialRole,
|
|
clear: Vec<FieldsRole>,
|
|
},
|
|
|
|
/// Server role deleted
|
|
ServerRoleDelete { id: String, role_id: String },
|
|
|
|
/// Update existing user
|
|
UserUpdate {
|
|
id: String,
|
|
data: PartialUser,
|
|
clear: Vec<FieldsUser>,
|
|
},
|
|
|
|
/// Relationship with another user changed
|
|
UserRelationship {
|
|
id: String,
|
|
user: User,
|
|
// ! this field can be deprecated
|
|
status: RelationshipStatus,
|
|
},
|
|
|
|
/// Settings updated remotely
|
|
UserSettingsUpdate { id: String, update: UserSettings },
|
|
|
|
/// New emoji
|
|
EmojiCreate(Emoji),
|
|
|
|
/// Delete emoji
|
|
EmojiDelete { id: String },
|
|
}
|