bevy_realtime/message/
realtime_message.rs

1use serde::{Deserialize, Serialize};
2use tungstenite::Message;
3
4use super::payload::Payload;
5
6/// Structure of messages sent to and from the server
7#[derive(Serialize, Deserialize, Debug, Default, Clone)]
8pub struct RealtimeMessage {
9    pub event: MessageEvent,
10    pub topic: String,
11    pub payload: Payload,
12    #[serde(rename = "ref")]
13    pub message_ref: Option<String>,
14}
15
16impl RealtimeMessage {
17    pub(crate) fn heartbeat() -> RealtimeMessage {
18        RealtimeMessage {
19            event: MessageEvent::Heartbeat,
20            topic: "phoenix".to_owned(),
21            payload: Payload::Empty {},
22            message_ref: None,
23        }
24    }
25}
26
27impl From<RealtimeMessage> for Message {
28    fn from(val: RealtimeMessage) -> Self {
29        let data = serde_json::to_string(&val).expect("Uhoh cannot into message");
30        Message::Text(data.into())
31    }
32}
33
34/// Realtime message event list
35#[derive(Serialize, Deserialize, Debug, PartialEq, Default, Clone)]
36#[serde(rename_all = "snake_case")]
37pub enum MessageEvent {
38    PhxClose,
39    PhxError,
40    PhxJoin,
41    PhxReply,
42    PhxLeave,
43    AccessToken,
44    Presence,
45    System,
46    Heartbeat,
47    PostgresChanges,
48    PresenceState,
49    PresenceDiff,
50    Track,
51    Untrack,
52    #[default]
53    Broadcast,
54}