1use crate::{measurement::MeasurementError, rsi};
2
3use safe_abstraction::raw_ptr;
4
5#[derive(Debug)]
8pub enum Error {
9 RmiErrorInput,
10 RmiErrorRealm(usize),
11 RmiErrorRec,
12 RmiErrorRtt(usize),
13 RmiErrorInUse,
14 RmiErrorCount,
15 RmiErrorOthers(InternalError),
17}
18
19#[derive(Debug)]
20pub enum InternalError {
21 NotExistRealm,
22 MeasurementError,
23 InvalidMeasurementIndex,
24}
25
26impl From<Error> for usize {
27 fn from(err: Error) -> Self {
28 match err {
29 Error::RmiErrorInput => 1,
30 Error::RmiErrorRealm(index) => 2 | (index << 8),
31 Error::RmiErrorRec => 3,
32 Error::RmiErrorRtt(level) => 4 | (level << 8),
33 Error::RmiErrorInUse => 5,
34 Error::RmiErrorCount => 6,
35 Error::RmiErrorOthers(_) => 7,
36 }
37 }
38}
39
40impl From<vmsa::error::Error> for Error {
41 fn from(_e: vmsa::error::Error) -> Self {
42 Error::RmiErrorInput
44 }
45}
46
47impl From<MeasurementError> for Error {
48 fn from(_value: MeasurementError) -> Self {
49 Error::RmiErrorOthers(InternalError::MeasurementError)
50 }
51}
52
53impl From<rsi::error::Error> for Error {
54 fn from(value: rsi::error::Error) -> Self {
55 match value {
56 rsi::error::Error::RealmDoesNotExists => {
57 Self::RmiErrorOthers(InternalError::NotExistRealm)
58 }
59 _ => Self::RmiErrorOthers(InternalError::InvalidMeasurementIndex),
60 }
61 }
62}
63
64impl From<raw_ptr::Error> for Error {
65 fn from(error: raw_ptr::Error) -> Self {
66 error!("Failed to convert a raw pointer to the struct. {:?}", error);
67 Error::RmiErrorInput
68 }
69}