use crate::Value;
use super::AmvmError;
#[derive(Debug, Clone)]
pub enum AmvmPropagate {
Return(Value),
Break,
Err(AmvmError),
}
impl From<AmvmError> for AmvmPropagate {
fn from(v: AmvmError) -> Self {
Self::Err(v)
}
}
impl AmvmPropagate {
#[must_use]
pub fn is_break(&self) -> bool {
matches!(self, Self::Break)
}
#[must_use]
pub fn is_return(&self) -> bool {
matches!(self, Self::Return(..))
}
#[must_use]
pub fn is_err(&self) -> bool {
matches!(self, Self::Err(..))
}
pub fn as_err(&self) -> Option<&AmvmError> {
if let Self::Err(v) = self {
Some(v)
} else {
None
}
}
}
pub type AmvmResult = Result<Value, AmvmPropagate>;