bevy_realtime/message/
realtime_message.rs1use serde::{Deserialize, Serialize};
2use tungstenite::Message;
3
4use super::payload::Payload;
5
6#[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#[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}