coins_ledger/
errors.rs

1use thiserror::Error;
2
3use crate::common::APDUResponseCodes;
4
5/// APDU-related errors
6#[derive(Debug, Error)]
7pub enum LedgerError {
8    /// APDU Response was too short
9    #[error("Response too short. Expected at least 2 bytes. Got {0:?}")]
10    ResponseTooShort(Vec<u8>),
11
12    /// APDU error
13    #[error("Ledger device: APDU Response error `{0}`")]
14    BadRetcode(APDUResponseCodes),
15
16    /// Ledger returned an unknown APDU
17    #[error("Ledger returned an unknown response status code {0:x}. This is a bug. Please file an issue at https://github.com/summa-tx/coins-rs/issues")]
18    UnknownAPDUCode(u16),
19
20    /// The backend has been disconnected.
21    #[error("The backend has been disconnected.")]
22    BackendGone,
23
24    /// JsValue Error
25    #[error("JsValue Error: {0}")]
26    #[cfg(target_arch = "wasm32")]
27    JsError(String),
28
29    /// Native transport error type.
30    #[error(transparent)]
31    #[cfg(not(target_arch = "wasm32"))]
32    NativeTransportError(#[from] crate::transports::native::NativeTransportError),
33}
34
35#[cfg(target_arch = "wasm32")]
36impl From<wasm_bindgen::prelude::JsValue> for LedgerError {
37    fn from(r: wasm_bindgen::prelude::JsValue) -> Self {
38        LedgerError::JsError(format!("{:#?}", &r))
39    }
40}
41
42impl From<APDUResponseCodes> for LedgerError {
43    fn from(r: APDUResponseCodes) -> Self {
44        LedgerError::BadRetcode(r)
45    }
46}