use bytes::Bytes;
use serde::{Deserialize, Serialize};
use sshx_core::{Sid, Uid};
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct WsWinsize {
pub x: i32,
pub y: i32,
pub rows: u16,
pub cols: u16,
}
impl Default for WsWinsize {
fn default() -> Self {
WsWinsize {
x: 0,
y: 0,
rows: 24,
cols: 80,
}
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct WsUser {
pub name: String,
pub cursor: Option<(i32, i32)>,
pub focus: Option<Sid>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum WsServer {
Hello(Uid, String),
InvalidAuth(),
Users(Vec<(Uid, WsUser)>),
UserDiff(Uid, Option<WsUser>),
Shells(Vec<(Sid, WsWinsize)>),
Chunks(Sid, u64, Vec<Bytes>),
Hear(Uid, String, String),
ShellLatency(u64),
Pong(u64),
Error(String),
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum WsClient {
Authenticate(Bytes),
SetName(String),
SetCursor(Option<(i32, i32)>),
SetFocus(Option<Sid>),
Create(i32, i32),
Close(Sid),
Move(Sid, Option<WsWinsize>),
Data(Sid, Bytes, u64),
Subscribe(Sid, u64),
Chat(String),
Ping(u64),
}