diff options
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/mod.rs | 54 | ||||
| -rw-r--r-- | src/event/sequence.rs | 4 |
2 files changed, 14 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) } } diff --git a/src/event/sequence.rs b/src/event/sequence.rs index ceb5bcb..bf6d5b8 100644 --- a/src/event/sequence.rs +++ b/src/event/sequence.rs @@ -72,6 +72,10 @@ impl Sequence { pub trait Sequenced { fn instant(&self) -> Instant; + fn at(&self) -> DateTime { + self.instant().at + } + fn sequence(&self) -> Sequence { self.instant().into() } |
