#![deny(missing_docs)]
#![deny(warnings)]
pub mod update;
pub use aspect_weave::Weave;
pub trait Enter {
type E;
fn enter(&self) -> Self::E;
}
pub enum Advice {
Return,
Retry,
}
pub trait OnResult<R>: Enter {
fn on_result(&self, enter: <Self as Enter>::E, _result: &R) -> Advice {
self.leave_scope(enter)
}
fn leave_scope(&self, _enter: <Self as Enter>::E) -> Advice {
Advice::Return
}
}
pub trait OnResultMut<R>: Enter {
fn on_result(&self, enter: <Self as Enter>::E, _result: &mut R) -> Advice {
self.leave_scope(enter)
}
fn leave_scope(&self, _enter: <Self as Enter>::E) -> Advice {
Advice::Return
}
}
impl<R, A: OnResult<R>> OnResultMut<R> for A {
fn on_result(&self, enter: <Self as Enter>::E, result: &mut R) -> Advice {
<Self as OnResult<R>>::on_result(self, enter, result)
}
fn leave_scope(&self, enter: <Self as Enter>::E) -> Advice {
<Self as OnResult<R>>::leave_scope(self, enter)
}
}