#[cfg(feature = "env-minimal")]
#[cfg_attr(docsrs, doc(cfg(feature = "env-minimal")))]
pub mod minimal;
mod single_aspect;
pub trait Page {
type Event;
fn start_group(&mut self);
fn end_group(&mut self);
fn next_event_in_group(&mut self) -> Option<Self::Event>;
fn before_event(&mut self, event: &Self::Event);
fn finish_event(&mut self, event: Self::Event);
fn status(&self) -> Status;
}
pub trait Mill {
type Page: Page;
fn new_page(&mut self) -> Self::Page;
}
#[derive(PartialEq, Eq, Debug)]
pub enum Status {
Continue,
Stop,
}
pub trait Environment {
type Mill: Mill;
type Return;
fn run<F, E>(self, func: F) -> Self::Return
where
F: FnMut(&mut Self::Mill) -> Result<Status, E>;
}
pub type MillOf<T> = <T as Environment>::Mill;
pub type PageOf<T> = <MillOf<T> as Mill>::Page;
pub type EventOf<T> = <PageOf<T> as Page>::Event;