use crate::types::{Stage, ThreadId, WordNum};
use displaydoc::Display;
#[derive(Debug, Display, Eq, PartialEq)]
pub enum Error {
Fatal(FatalError),
ValueWasNotExpectedValue,
}
impl From<FatalError> for Error {
fn from(fatal_error: FatalError) -> Self {
Error::Fatal(fatal_error)
}
}
#[derive(Debug, Display, Eq, PartialEq)]
pub enum FatalError {
StageOutOfBounds(usize),
IllegalStageChange {
original_stage: Stage,
actual_stage: Stage,
},
IllegalHelpeeStage(Stage),
TargetAddressWasNotValidPointer {
word_num: WordNum,
target_address: usize,
},
SequenceNumChangedByNonOriginatingThread { originating_thread_id: ThreadId },
TriedToSetValueWhichWasNotClaimMarker {
word_num: WordNum,
target_address: usize,
actual_value: usize,
},
TopBitsOfValueWereIllegal {
word_num: WordNum,
target_address: usize,
value: usize,
num_reserved_bits: usize,
},
SharedStateWasNotValidPointer,
}
impl From<StageOutOfBoundsError> for FatalError {
fn from(stage_out_of_bounds_error: StageOutOfBoundsError) -> Self {
FatalError::StageOutOfBounds(stage_out_of_bounds_error.0)
}
}
#[derive(Debug, Display, Eq, PartialEq)]
pub struct StageOutOfBoundsError(pub(crate) usize);