use crate::sync_client::SyncClientID; use crate::user::{APIClientID, UserID}; use ruma::api::client::sync::sync_events::v3::{GlobalAccountData, Presence, Rooms, ToDevice}; use ruma::api::client::sync::sync_events::DeviceLists; #[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] pub struct SyncEvent { /// Updates to rooms. #[serde(default, skip_serializing_if = "Rooms::is_empty")] pub rooms: Rooms, /// Updates to the presence status of other users. #[serde(default, skip_serializing_if = "Presence::is_empty")] pub presence: Presence, /// The global private data created by this user. #[serde(default, skip_serializing_if = "GlobalAccountData::is_empty")] pub account_data: GlobalAccountData, /// Messages sent directly between devices. #[serde(default, skip_serializing_if = "ToDevice::is_empty")] pub to_device: ToDevice, /// Information on E2E device updates. /// /// Only present on an incremental sync. #[serde(default, skip_serializing_if = "DeviceLists::is_empty")] pub device_lists: DeviceLists, } /// Broadcast messages #[derive(Debug, Clone)] pub enum BroadcastMessage { /// Request to close the session of a specific client CloseClientSession(APIClientID), /// Close all the sessions of a given user CloseAllUserSessions(UserID), /// Stop sync client for a given user StopSyncTaskForUser(UserID), /// Start sync client for a given user (if not already running) StartSyncTaskForUser(UserID), /// Stop a client with a given client ID StopSyncClient(SyncClientID), /// Propagate a new sync event SyncEvent(UserID, SyncEvent), }