diff options
Diffstat (limited to 'src/channel/snapshot.rs')
| -rw-r--r-- | src/channel/snapshot.rs | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/src/channel/snapshot.rs b/src/channel/snapshot.rs deleted file mode 100644 index 96801b8..0000000 --- a/src/channel/snapshot.rs +++ /dev/null @@ -1,43 +0,0 @@ -use super::{ - Id, - event::{Created, Event}, -}; -use crate::{clock::DateTime, event::Instant, name::Name}; - -#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] -pub struct Channel { - #[serde(flatten)] - pub created: Instant, - pub id: Id, - pub name: Name, - #[serde(skip_serializing_if = "Option::is_none")] - pub deleted_at: Option<DateTime>, -} - -impl Channel { - fn apply(state: Option<Self>, event: Event) -> Option<Self> { - match (state, event) { - (None, Event::Created(event)) => Some(event.into()), - (Some(channel), Event::Deleted(event)) if channel.id == event.id => None, - (state, event) => panic!("invalid channel event {event:#?} for state {state:#?}"), - } - } -} - -impl FromIterator<Event> for Option<Channel> { - fn from_iter<I: IntoIterator<Item = Event>>(events: I) -> Self { - events.into_iter().fold(None, Channel::apply) - } -} - -impl From<&Created> for Channel { - fn from(event: &Created) -> Self { - event.channel.clone() - } -} - -impl From<Created> for Channel { - fn from(event: Created) -> Self { - event.channel - } -} |
