1use {
5 num_derive::{FromPrimitive, ToPrimitive},
6 num_traits::{FromPrimitive, ToPrimitive},
7};
8
9#[derive(
10 Debug,
11 Copy,
12 Clone,
13 rkyv::Archive,
14 thiserror::Error,
15 rkyv::Serialize,
16 rkyv::Deserialize,
17 FromPrimitive,
18 ToPrimitive,
19 PartialEq,
20)]
21pub enum NfcError {
22 #[error("Unknown error")]
23 Unknown,
24 #[error("Internal error")]
25 Internal,
26 #[error("Timeout error")]
27 Timeout,
28 #[error("NFC functionality disabled")]
29 Disabled,
30 #[error("Xous error")]
31 Xous,
32 #[error("Spi error")]
33 Spi,
34 #[error("Gpio error")]
35 Gpio,
36}
37
38impl From<xous::Error> for NfcError {
39 fn from(_value: xous::Error) -> Self { NfcError::Xous }
40}
41
42#[cfg(keyos)]
43impl From<spi::SpiError> for NfcError {
44 fn from(_value: spi::SpiError) -> Self { NfcError::Spi }
45}
46
47#[cfg(keyos)]
48impl From<gpio::GpioApiError> for NfcError {
49 fn from(_value: gpio::GpioApiError) -> Self { NfcError::Gpio }
50}
51
52impl From<()> for NfcError {
53 fn from(_: ()) -> Self { NfcError::Unknown }
54}
55
56impl server::AsScalar<1> for NfcError {
57 fn as_scalar(&self) -> [u32; 1] { [self.to_u32().unwrap()] }
58}
59
60impl server::FromScalar<1> for NfcError {
61 fn from_scalar([value]: [u32; 1]) -> Self { Self::from_u32(value).unwrap_or(Self::Unknown) }
62}