pub mod command;
pub mod datagram;
pub mod event;
pub mod snapshot;
pub mod state;
pub mod stream;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MessageClass {
Event,
Command,
Reply,
State,
Datagram,
Stream,
Snapshot,
System,
}
impl MessageClass {
pub fn as_str(self) -> &'static str {
match self {
MessageClass::Event => "event",
MessageClass::Command => "command",
MessageClass::Reply => "reply",
MessageClass::State => "state",
MessageClass::Datagram => "datagram",
MessageClass::Stream => "stream",
MessageClass::Snapshot => "snapshot",
MessageClass::System => "system",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DeliveryMode {
AtMostOnce,
AtLeastOnce,
ExactlyOnceEffect,
LatestOnly,
BestEffort,
DurableOrdered,
}
pub use crate::broker::fanout::SubscribeIntent;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SubscribeResult {
Accepted,
Denied,
NotFound,
Gone,
ReplayRequired,
SnapshotRequired,
RateLimited,
Overloaded,
InvalidFilter,
}
#[derive(Debug, Clone)]
pub enum Message {
Event(event::Event),
Command(command::Command),
Reply(command::Reply),
State(state::State),
Datagram(datagram::Datagram),
Stream(stream::StreamSegment),
Snapshot(snapshot::Snapshot),
System {
event: String,
payload: serde_json::Value,
},
}
impl Message {
pub fn class(&self) -> MessageClass {
match self {
Message::Event(_) => MessageClass::Event,
Message::Command(_) => MessageClass::Command,
Message::Reply(_) => MessageClass::Reply,
Message::State(_) => MessageClass::State,
Message::Datagram(_) => MessageClass::Datagram,
Message::Stream(_) => MessageClass::Stream,
Message::Snapshot(_) => MessageClass::Snapshot,
Message::System { .. } => MessageClass::System,
}
}
}