use crate::error::RealtimeError; use actix::{Message, Recipient}; use collab::core::origin::CollabOrigin; use serde_repr::{Deserialize_repr, Serialize_repr}; use std::fmt::{Debug, Display}; use std::hash::Hash; use std::sync::Arc; use tokio_stream::Stream; pub use realtime_entity::message::RealtimeMessage; pub trait RealtimeUser: Clone + Debug + Send + Sync + 'static + Display + Hash + Eq + PartialEq { fn uid(&self) -> i64; } impl RealtimeUser for Arc where T: RealtimeUser, { fn uid(&self) -> i64 { self.as_ref().uid() } } #[derive(Debug, Message, Clone)] #[rtype(result = "Result<(), RealtimeError>")] pub struct Connect { pub socket: Recipient, pub user: U, pub session_id: String, } #[derive(Debug, Message, Clone)] #[rtype(result = "Result<(), RealtimeError>")] pub struct Disconnect { pub user: U, pub session_id: String, } #[derive(Debug, Message, Clone)] #[rtype(result = "Result<(), RealtimeError>")] pub struct DisconnectByServer; #[derive(Debug, Clone, Serialize_repr, Deserialize_repr)] #[repr(u8)] pub enum BusinessID { CollabId = 1, } #[derive(Debug, Message, Clone)] #[rtype(result = "Result<(), RealtimeError>")] pub struct ClientMessage { pub user: U, pub message: RealtimeMessage, } #[derive(Message)] #[rtype(result = "Result<(), RealtimeError>")] pub struct ClientStreamMessage { pub uid: i64, pub stream: Box + Unpin + Send>, } #[derive(Debug, Hash, PartialEq, Eq)] pub(crate) struct Editing { pub object_id: String, pub origin: CollabOrigin, }