use super::Channel; use crate::{ channel, event::{Instant, Sequenced}, }; #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] #[serde(tag = "event", rename_all = "snake_case")] pub enum Event { Created(Created), Deleted(Deleted), } impl Sequenced for Event { fn instant(&self) -> Instant { match self { Self::Created(event) => event.channel.created, Self::Deleted(event) => event.instant, } } } #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] pub struct Created { #[serde(flatten)] pub channel: Channel, } impl From for Event { fn from(event: Created) -> Self { Self::Created(event) } } #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] pub struct Deleted { #[serde(flatten)] pub instant: Instant, pub id: channel::Id, } impl From for Event { fn from(event: Deleted) -> Self { Self::Deleted(event) } }