ledger_lib/
error.rs

1//! Ledger interface [Error] type and conversions
2
3use ledger_proto::ApduError;
4
5/// Ledger interface error type
6#[derive(Debug, thiserror::Error)]
7pub enum Error {
8    #[cfg(feature = "transport_usb")]
9    #[error(transparent)]
10    Hid(#[from] hidapi::HidError),
11
12    #[cfg(feature = "transport_tcp")]
13    #[error(transparent)]
14    Tcp(#[from] tokio::io::Error),
15
16    #[cfg(feature = "transport_ble")]
17    #[error(transparent)]
18    Ble(#[from] btleplug::Error),
19
20    #[error("Unknown ledger model: {0}")]
21    UnknownModel(u16),
22
23    #[error("Unknown error")]
24    Unknown,
25
26    #[error("No devices found")]
27    NoDevices,
28
29    #[error("Invalid device index: {0}")]
30    InvalidDeviceIndex(usize),
31
32    #[error("Apdu encode/decode error: {0}")]
33    Apdu(#[from] ApduError),
34
35    #[error("Response error 0x{0:02x}{1:02x}")]
36    Response(u8, u8),
37
38    #[error("Request timeout")]
39    Timeout,
40
41    #[error("Unexpected response payload")]
42    UnexpectedResponse,
43
44    #[error("Device in use")]
45    DeviceInUse,
46}
47
48impl From<tokio::time::error::Elapsed> for Error {
49    fn from(_e: tokio::time::error::Elapsed) -> Self {
50        Self::Timeout
51    }
52}