summaryrefslogtreecommitdiff
path: root/src/events/types.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/events/types.rs')
-rw-r--r--src/events/types.rs55
1 files changed, 46 insertions, 9 deletions
diff --git a/src/events/types.rs b/src/events/types.rs
index 9a65207..966842d 100644
--- a/src/events/types.rs
+++ b/src/events/types.rs
@@ -56,6 +56,11 @@ impl ResumePoint {
elements.insert(channel.clone(), sequence);
}
+ pub fn forget(&mut self, channel: &channel::Id) {
+ let Self(elements) = self;
+ elements.remove(channel);
+ }
+
pub fn get(&self, channel: &channel::Id) -> Option<Sequence> {
let Self(elements) = self;
elements.get(channel).copied()
@@ -92,7 +97,6 @@ pub struct ChannelEvent {
#[serde(skip)]
pub sequence: Sequence,
pub at: DateTime,
- pub channel: Channel,
#[serde(flatten)]
pub data: ChannelEventData,
}
@@ -102,45 +106,78 @@ impl ChannelEvent {
Self {
at: channel.created_at,
sequence: Sequence::default(),
- channel,
- data: ChannelEventData::Created,
+ 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 ResumeElement for ChannelEvent {
fn element(&self) -> (&channel::Id, Sequence) {
- (&self.channel.id, self.sequence)
+ (self.channel_id(), self.sequence)
}
}
#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ChannelEventData {
- Created,
+ 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::Message,
}
impl From<MessageEvent> for ChannelEventData {
- fn from(message: MessageEvent) -> Self {
- Self::Message(message)
+ 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(message: MessageDeletedEvent) -> Self {
- Self::MessageDeleted(message)
+ 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)
}
}