summaryrefslogtreecommitdiff
path: root/src/message/event.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/message/event.rs')
-rw-r--r--src/message/event.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/message/event.rs b/src/message/event.rs
new file mode 100644
index 0000000..bcc2238
--- /dev/null
+++ b/src/message/event.rs
@@ -0,0 +1,50 @@
+use super::{snapshot::Message, Id};
+use crate::{
+ channel::Channel,
+ event::{Instant, Sequenced},
+};
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct Event {
+ #[serde(flatten)]
+ pub instant: Instant,
+ #[serde(flatten)]
+ pub kind: Kind,
+}
+
+impl Sequenced for Event {
+ fn instant(&self) -> Instant {
+ self.instant
+ }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+#[serde(tag = "type", rename_all = "snake_case")]
+pub enum Kind {
+ Sent(Sent),
+ Deleted(Deleted),
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct Sent {
+ #[serde(flatten)]
+ pub message: Message,
+}
+
+impl From<Sent> for Kind {
+ fn from(event: Sent) -> Self {
+ Self::Sent(event)
+ }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct Deleted {
+ pub channel: Channel,
+ pub message: Id,
+}
+
+impl From<Deleted> for Kind {
+ fn from(event: Deleted) -> Self {
+ Self::Deleted(event)
+ }
+}