sms_types/
websocket.rs

1//! Websocket interface related message types.
2
3use serde::{Deserialize, Serialize};
4
5/// WebSocket message types that can be received from the server.
6#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
7#[serde(tag = "type", content = "data")]
8pub enum WebsocketMessage {
9    /// New SMS message received.
10    #[serde(rename = "incoming")]
11    IncomingMessage(crate::sms::SmsMessage),
12
13    /// SMS message being sent from API or other connected client.
14    #[serde(rename = "outgoing")]
15    OutgoingMessage(crate::sms::SmsMessage),
16
17    /// Delivery report update.
18    #[serde(rename = "delivery")]
19    DeliveryReport {
20        /// The target `message_id` this delivery report applies to.
21        /// This is determined from the `message_reference` and sender.
22        message_id: i64,
23
24        /// The received delivery report.
25        report: crate::sms::SmsPartialDeliveryReport,
26    },
27
28    /// Modem hat connection status update.
29    /// This can be either: Startup, Online, `ShuttingDown`, Offline
30    #[serde(rename = "modem_status_update")]
31    ModemStatusUpdate {
32        /// Previous state from last update.
33        previous: crate::modem::ModemStatusUpdateState,
34
35        /// Current state after update.
36        current: crate::modem::ModemStatusUpdateState,
37    },
38
39    /// An unsolicited position report from GNSS.
40    #[cfg(feature = "gnss")]
41    #[serde(rename = "gnss_position_report")]
42    GnssPositionReport(crate::gnss::PositionReport),
43
44    /// WebSocket connection status update (client-side only).
45    /// This message is generated locally when there is a connection or disconnection.
46    WebsocketConnectionUpdate {
47        /// Connection status: true = connected, false = disconnected
48        connected: bool,
49
50        /// If connection is false, will the client attempt to automatically reconnect?
51        reconnect: bool,
52    },
53}