use crate::{measurement::MeasurementError, rsi};
use safe_abstraction::raw_ptr;
#[derive(Debug)]
pub enum Error {
RmiErrorInput,
RmiErrorRealm(usize),
RmiErrorRec,
RmiErrorRtt(usize),
RmiErrorInUse,
RmiErrorCount,
RmiErrorOthers(InternalError),
}
#[derive(Debug)]
pub enum InternalError {
NotExistRealm,
MeasurementError,
InvalidMeasurementIndex,
}
impl From<Error> for usize {
fn from(err: Error) -> Self {
match err {
Error::RmiErrorInput => 1,
Error::RmiErrorRealm(index) => 2 | (index << 8),
Error::RmiErrorRec => 3,
Error::RmiErrorRtt(level) => 4 | (level << 8),
Error::RmiErrorInUse => 5,
Error::RmiErrorCount => 6,
Error::RmiErrorOthers(_) => 7,
}
}
}
impl From<vmsa::error::Error> for Error {
fn from(_e: vmsa::error::Error) -> Self {
Error::RmiErrorInput
}
}
impl From<MeasurementError> for Error {
fn from(_value: MeasurementError) -> Self {
Error::RmiErrorOthers(InternalError::MeasurementError)
}
}
impl From<rsi::error::Error> for Error {
fn from(value: rsi::error::Error) -> Self {
match value {
rsi::error::Error::RealmDoesNotExists => {
Self::RmiErrorOthers(InternalError::NotExistRealm)
}
_ => Self::RmiErrorOthers(InternalError::InvalidMeasurementIndex),
}
}
}
impl From<raw_ptr::Error> for Error {
fn from(error: raw_ptr::Error) -> Self {
error!("Failed to convert a raw pointer to the struct. {:?}", error);
Error::RmiErrorInput
}
}