use crate::event::Event; pub mod stream; pub fn conversation(event: Event) -> Option { match event { Event::Conversation(conversation) => Some(conversation), _ => None, } } pub fn message(event: Event) -> Option { match event { Event::Message(event) => Some(event), _ => None, } } pub fn user(event: Event) -> Option { match event { Event::User(event) => Some(event), _ => None, } } pub mod conversation { use crate::conversation::{Event, event}; pub fn created(event: Event) -> Option { match event { Event::Created(event) => Some(event), Event::Deleted(_) => None, } } pub fn deleted(event: Event) -> Option { match event { Event::Deleted(event) => Some(event), Event::Created(_) => None, } } } pub mod message { use crate::message::{Event, event}; pub fn sent(event: Event) -> Option { match event { Event::Sent(event) => Some(event), Event::Deleted(_) => None, } } pub fn deleted(event: Event) -> Option { match event { Event::Deleted(event) => Some(event), Event::Sent(_) => None, } } } pub mod user { use crate::user::{Event, event}; // This could be defined as `-> event::Created`. However, I want the interface to be consistent // with the event stream transformers for other types, and we'd have to refactor the return type // to `-> Option` the instant users sprout a second event, anyways. #[allow(clippy::unnecessary_wraps)] pub fn created(event: Event) -> Option { match event { Event::Created(event) => Some(event), } } }