use super::Channel; use crate::{ 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 { Created(Created), Deleted(Deleted), } #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] pub struct Created { pub channel: Channel, } impl From for Kind { fn from(event: Created) -> Self { Self::Created(event) } } #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] pub struct Deleted { pub channel: channel::Id, } impl From for Kind { fn from(event: Deleted) -> Self { Self::Deleted(event) } }