summaryrefslogtreecommitdiff
path: root/src/event/types.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-02 00:41:25 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-02 00:41:38 -0400
commit357116366c1307bedaac6a3dfe9c5ed8e0e0c210 (patch)
treed701378187d8b0f99d524991925e8348c6cab0d6 /src/event/types.rs
parentf878f0b5eaa44e8ee8d67cbfd706926ff2119113 (diff)
First pass on reorganizing the backend.
This is primarily renames and repackagings.
Diffstat (limited to 'src/event/types.rs')
-rw-r--r--src/event/types.rs97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/event/types.rs b/src/event/types.rs
new file mode 100644
index 0000000..cd7dea6
--- /dev/null
+++ b/src/event/types.rs
@@ -0,0 +1,97 @@
+use crate::{
+ channel::{self, Channel},
+ clock::DateTime,
+ event::Sequence,
+ login::Login,
+ message::{self, Message},
+};
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct ChannelEvent {
+ #[serde(skip)]
+ pub sequence: Sequence,
+ pub at: DateTime,
+ #[serde(flatten)]
+ pub data: ChannelEventData,
+}
+
+impl ChannelEvent {
+ pub fn created(channel: Channel) -> Self {
+ Self {
+ at: channel.created_at,
+ sequence: channel.created_sequence,
+ data: CreatedEvent { channel }.into(),
+ }
+ }
+
+ pub fn channel_id(&self) -> &channel::Id {
+ match &self.data {
+ ChannelEventData::Created(event) => &event.channel.id,
+ ChannelEventData::Message(event) => &event.channel.id,
+ ChannelEventData::MessageDeleted(event) => &event.channel.id,
+ ChannelEventData::Deleted(event) => &event.channel,
+ }
+ }
+}
+
+impl<'c> From<&'c ChannelEvent> for Sequence {
+ fn from(event: &'c ChannelEvent) -> Self {
+ event.sequence
+ }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+#[serde(tag = "type", rename_all = "snake_case")]
+pub enum ChannelEventData {
+ Created(CreatedEvent),
+ Message(MessageEvent),
+ MessageDeleted(MessageDeletedEvent),
+ Deleted(DeletedEvent),
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct CreatedEvent {
+ pub channel: Channel,
+}
+
+impl From<CreatedEvent> for ChannelEventData {
+ fn from(event: CreatedEvent) -> Self {
+ Self::Created(event)
+ }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct MessageEvent {
+ pub channel: Channel,
+ pub sender: Login,
+ pub message: Message,
+}
+
+impl From<MessageEvent> for ChannelEventData {
+ fn from(event: MessageEvent) -> Self {
+ Self::Message(event)
+ }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct MessageDeletedEvent {
+ pub channel: Channel,
+ pub message: message::Id,
+}
+
+impl From<MessageDeletedEvent> for ChannelEventData {
+ fn from(event: MessageDeletedEvent) -> Self {
+ Self::MessageDeleted(event)
+ }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
+pub struct DeletedEvent {
+ pub channel: channel::Id,
+}
+
+impl From<DeletedEvent> for ChannelEventData {
+ fn from(event: DeletedEvent) -> Self {
+ Self::Deleted(event)
+ }
+}