use super::{ User, event::{Created, Event}, }; use crate::event::{Instant, Sequence}; #[derive(Clone, Debug, Eq, PartialEq)] pub struct History { pub user: User, pub created: Instant, } // State interface impl History { pub fn as_of(&self, sequence: S) -> Option where S: Into, { self.events() .filter(Sequence::up_to(sequence.into())) .collect() } } // Events interface impl History { fn created(&self) -> Event { Created { instant: self.created, user: self.user.clone(), } .into() } pub fn events(&self) -> impl Iterator + use<> { [self.created()].into_iter() } }