use crate::prelude::*;
pub trait UnwrapOrRevert<T> {
fn unwrap_or_revert_with<E: Into<OdraError>, M: Revertible>(self, rev: &M, err: E) -> T;
fn unwrap_or_revert<M: Revertible>(self, rev: &M) -> T;
}
impl<T, E: Into<OdraError>> UnwrapOrRevert<T> for Result<T, E> {
fn unwrap_or_revert_with<F: Into<OdraError>, M: Revertible>(self, rev: &M, err: F) -> T {
self.unwrap_or_else(|_| rev.revert(err))
}
fn unwrap_or_revert<M: Revertible>(self, rev: &M) -> T {
self.unwrap_or_else(|err| rev.revert(err))
}
}
impl<T> UnwrapOrRevert<T> for Option<T> {
fn unwrap_or_revert_with<E: Into<OdraError>, M: Revertible>(self, rev: &M, err: E) -> T {
self.unwrap_or_else(|| rev.revert(err))
}
fn unwrap_or_revert<M: Revertible>(self, rev: &M) -> T {
self.unwrap_or_else(|| rev.revert(ExecutionError::UnwrapError))
}
}