terra_rust_wallet/
errors.rs

1#![allow(missing_docs)]
2#![allow(missing_docs)]
3use terra_rust_api::errors::TerraRustAPIError;
4use thiserror::Error;
5
6#[derive(Error, Debug)]
7pub enum TerraRustWalletError {
8    #[error(transparent)]
9    KeyringError(#[from] KeyringErrorAdapter),
10    #[error(transparent)]
11    SerdeJsonError(#[from] ::serde_json::Error),
12    #[error(transparent)]
13    KeyringErrorAdapter(#[from] ::keyring::Error),
14    #[error(transparent)]
15    TerraRustAPIError(#[from] TerraRustAPIError),
16    #[error("Terra Wallet `{key}` Key not found Error")]
17    KeyNotFound {
18        key: String,
19        source: KeyringErrorAdapter,
20    },
21
22    #[error("unknown Terra-Rust Wallet error")]
23    Unknown,
24}
25
26/// Workaround type to provide [Sync] on Linux.
27///
28/// On Linux, [keyring::KeyringError] does not implement `Sync` due to depending
29/// on an older version of the `dbus` crate. This prevents usage of `anyhow`. This
30/// wrapper is used to bypass that issue on Linux.
31#[derive(Error, Debug)]
32#[error(transparent)]
33pub struct KeyringErrorAdapter(anyhow::Error);
34
35impl From<keyring::Error> for KeyringErrorAdapter {
36    fn from(e: keyring::Error) -> Self {
37        KeyringErrorAdapter(anyhow::anyhow!("Keyring error: {:?}", e))
38    }
39}