use super::channel;
use super::timetoken::Timetoken;
use json::JsonValue;
#[derive(Debug, Clone)]
pub struct Message {
pub message_type: Type,
pub route: Option<channel::Name>,
pub channel: channel::Name,
pub json: JsonValue,
pub metadata: JsonValue,
pub timetoken: Timetoken,
pub client: Option<String>,
pub subscribe_key: String,
pub flags: u32,
}
#[derive(Debug, Clone, Eq, PartialEq, Copy)]
pub enum Type {
Publish,
Signal,
Objects,
Action,
Presence,
Unknown(u32),
}
impl Type {
#[must_use]
pub fn from_json(i: &JsonValue) -> Self {
match i.as_u32().unwrap_or(0) {
0 => Self::Publish,
1 => Self::Signal,
2 => Self::Objects,
3 => Self::Action,
i => Self::Unknown(i),
}
}
}
impl Default for Message {
#[must_use]
fn default() -> Self {
Self {
message_type: Type::Unknown(0),
route: None,
channel: channel::Name::default(),
json: JsonValue::Null,
metadata: JsonValue::Null,
timetoken: Timetoken::default(),
client: None,
subscribe_key: String::default(),
flags: Default::default(),
}
}
}