pub use crate::continuation::error::*;
#[derive(Copy, Clone, Debug, PartialEq, Eq, thiserror::Error)]
pub enum Error {
#[error("deadlock detected")]
Deadlock,
#[error(transparent)]
NotBorn(#[from] NotBorn),
#[error(transparent)]
NotIdle(#[from] NotIdle),
#[error(transparent)]
NotBusy(#[from] NotBusy),
#[error(transparent)]
NotNext(#[from] NotNext),
#[error(transparent)]
NotDone(#[from] NotDone),
#[error(transparent)]
NotGone(#[from] NotGone),
#[error(transparent)]
NotInit(#[from] NotInit),
#[error(transparent)]
NotTerm(#[from] NotTerm),
#[error("causality error")]
Causality,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, thiserror::Error)]
pub struct Deadlock<T>(pub T);
impl<T> From<Deadlock<T>> for Error {
fn from(_: Deadlock<T>) -> Self {
Error::Deadlock
}
}
impl<T: crate::config::Time> core::fmt::Display for Deadlock<T> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "deadlock detected at {}", self.0.display())
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, thiserror::Error)]
#[error(
"continuation was scheduled at model-time {cause:?} (cause) for model-time \
{effect:?} (effect), violating causality"
)]
pub struct CausalityError<T> {
pub cause: T,
pub effect: T,
}
impl<T> From<CausalityError<T>> for Error {
fn from(_: CausalityError<T>) -> Self {
Error::Causality
}
}