diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-08 22:43:22 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-09 11:45:31 -0400 |
| commit | 9e171096a72d3e63626df7b09970476aba28eb06 (patch) | |
| tree | 7272c065fdb85148dc5c90d937fc7d13fc716ccf /src/event/mod.rs | |
| parent | 653e2de752a97e377fc9963ba60d9408e7089528 (diff) | |
Use a two-tier hierarchy for events.
This will make it much easier to slot in new event types (login events!).
Diffstat (limited to 'src/event/mod.rs')
| -rw-r--r-- | src/event/mod.rs | 54 |
1 files changed, 10 insertions, 44 deletions
diff --git a/src/event/mod.rs b/src/event/mod.rs index e748d66..698e55a 100644 --- a/src/event/mod.rs +++ b/src/event/mod.rs @@ -15,63 +15,29 @@ pub use self::{ pub type ResumePoint = Option<Sequence>; #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] -pub struct Event { - #[serde(flatten)] - pub instant: Instant, - #[serde(flatten)] - pub kind: Kind, +#[serde(tag = "type", rename_all = "snake_case")] +pub enum Event { + Channel(channel::Event), + Message(message::Event), } impl Sequenced for Event { fn instant(&self) -> Instant { - self.instant + match self { + Self::Channel(event) => event.instant(), + Self::Message(event) => event.instant(), + } } } impl From<channel::Event> for Event { fn from(event: channel::Event) -> Self { - Self { - instant: event.instant, - kind: event.kind.into(), - } + Self::Channel(event) } } impl From<message::Event> for Event { fn from(event: message::Event) -> Self { - Self { - instant: event.instant(), - kind: event.kind.into(), - } - } -} - -#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] -#[serde(tag = "type", rename_all = "snake_case")] -pub enum Kind { - #[serde(rename = "created")] - ChannelCreated(channel::event::Created), - #[serde(rename = "message")] - MessageSent(message::event::Sent), - MessageDeleted(message::event::Deleted), - #[serde(rename = "deleted")] - ChannelDeleted(channel::event::Deleted), -} - -impl From<channel::event::Kind> for Kind { - fn from(kind: channel::event::Kind) -> Self { - match kind { - channel::event::Kind::Created(created) => Self::ChannelCreated(created), - channel::event::Kind::Deleted(deleted) => Self::ChannelDeleted(deleted), - } - } -} - -impl From<message::event::Kind> for Kind { - fn from(kind: message::event::Kind) -> Self { - match kind { - message::event::Kind::Sent(created) => Self::MessageSent(created), - message::event::Kind::Deleted(deleted) => Self::MessageDeleted(deleted), - } + Self::Message(event) } } |
