nfc/
error.rs

1// SPDX-FileCopyrightText: 2024 Foundation Devices, Inc. <hello@foundation.xyz>
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4use {
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}