1use ledger_proto::ApduError;
4
5#[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}