AppFlowy-Cloud/libs/realtime/src/entities.rs

71 lines
1.5 KiB
Rust

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<T> RealtimeUser for Arc<T>
where
T: RealtimeUser,
{
fn uid(&self) -> i64 {
self.as_ref().uid()
}
}
#[derive(Debug, Message, Clone)]
#[rtype(result = "Result<(), RealtimeError>")]
pub struct Connect<U> {
pub socket: Recipient<RealtimeMessage>,
pub user: U,
pub session_id: String,
}
#[derive(Debug, Message, Clone)]
#[rtype(result = "Result<(), RealtimeError>")]
pub struct Disconnect<U> {
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<U> {
pub user: U,
pub message: RealtimeMessage,
}
#[derive(Message)]
#[rtype(result = "Result<(), RealtimeError>")]
pub struct ClientStreamMessage {
pub uid: i64,
pub stream: Box<dyn Stream<Item = RealtimeMessage> + Unpin + Send>,
}
#[derive(Debug, Hash, PartialEq, Eq)]
pub(crate) struct Editing {
pub object_id: String,
pub origin: CollabOrigin,
}