cometd_client/types/
message.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value as JsonValue;
3use serde_with::skip_serializing_none;
4
5/// Contains channel name of message received from cometd server.
6#[derive(Debug)]
7pub struct Data<Msg> {
8    /// Channel name from which was received message.
9    pub channel: Option<String>,
10    /// Received message.
11    pub message: Option<Msg>,
12}
13
14#[skip_serializing_none]
15#[derive(Debug, Default, Deserialize, Serialize)]
16pub(crate) struct Message {
17    pub(crate) id: Option<String>,
18    pub(crate) version: Option<String>,
19    #[serde(rename = "minimumVersion")]
20    pub(crate) minimum_version: Option<String>,
21    pub(crate) channel: Option<String>,
22    #[serde(rename = "clientId")]
23    pub(crate) client_id: Option<Box<str>>,
24    #[serde(rename = "supportedConnectionTypes")]
25    pub(crate) supported_connection_types: Option<Vec<String>>,
26    pub(crate) data: Option<JsonValue>,
27    pub(crate) successful: Option<bool>,
28    pub(crate) error: Option<String>,
29    pub(crate) advice: Option<Advice>,
30}
31
32#[skip_serializing_none]
33#[derive(Debug, Default, Serialize, Deserialize)]
34pub(crate) struct Advice {
35    reconnect: Option<Reconnect>,
36    //interval: Option<u64>,
37    //timeout: Option<u64>,
38}
39
40impl Advice {
41    #[inline(always)]
42    pub(crate) fn reconnect(this: Option<Self>) -> Reconnect {
43        this.and_then(|advice| advice.reconnect).unwrap_or_default()
44    }
45}
46
47/// Advice what to do on error.
48#[allow(missing_docs)]
49#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)]
50#[serde(rename_all = "lowercase")]
51pub enum Reconnect {
52    #[default]
53    None,
54    Handshake,
55    Retry,
56}