use core::fmt;
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Error {
Tpm {
code: i32,
func: &'static str,
},
BadArgs {
msg: &'static str,
},
AlreadyInit,
}
impl Error {
#[inline]
pub fn check(rc: i32, func: &'static str) -> Result<(), Error> {
if rc == 0 {
Ok(())
} else {
Err(Error::Tpm { code: rc, func })
}
}
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::Tpm { code, func } => {
write!(f, "{func} failed: wolfTPM error {code:#010x}")
}
Error::BadArgs { msg } => write!(f, "invalid argument: {msg}"),
Error::AlreadyInit => write!(f, "wolfTPM device already initialized"),
}
}
}
impl core::error::Error for Error {}