refactor(wallet): use walleterror for error handling in try_get_internal_address
This commit is contained in:
parent
9a996b1a94
commit
c6d17b77ec
@ -27,6 +27,11 @@ interface WalletCreationError {
|
|||||||
LoadedNetworkDoesNotMatch(Network expected, Network? got);
|
LoadedNetworkDoesNotMatch(Network expected, Network? got);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
[Error]
|
||||||
|
interface PersistenceError {
|
||||||
|
Write(string e);
|
||||||
|
};
|
||||||
|
|
||||||
[Error]
|
[Error]
|
||||||
interface EsploraError {
|
interface EsploraError {
|
||||||
Ureq(string error_message);
|
Ureq(string error_message);
|
||||||
@ -118,7 +123,7 @@ interface Wallet {
|
|||||||
|
|
||||||
AddressInfo get_address(AddressIndex address_index);
|
AddressInfo get_address(AddressIndex address_index);
|
||||||
|
|
||||||
[Throws=Alpha3Error]
|
[Throws=PersistenceError]
|
||||||
AddressInfo try_get_internal_address(AddressIndex address_index);
|
AddressInfo try_get_internal_address(AddressIndex address_index);
|
||||||
|
|
||||||
Network network();
|
Network network();
|
||||||
|
@ -59,6 +59,12 @@ pub enum WalletCreationError {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
pub enum PersistenceError {
|
||||||
|
#[error("writing to persistence error: {e}")]
|
||||||
|
Write { e: String },
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
pub enum EsploraError {
|
pub enum EsploraError {
|
||||||
#[error("ureq error: {error_message}")]
|
#[error("ureq error: {error_message}")]
|
||||||
@ -123,6 +129,14 @@ impl From<NewOrLoadError<std::io::Error, IterError>> for WalletCreationError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<std::io::Error> for PersistenceError {
|
||||||
|
fn from(error: std::io::Error) -> Self {
|
||||||
|
PersistenceError::Write {
|
||||||
|
e: error.to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<DescriptorError> for Alpha3Error {
|
impl From<DescriptorError> for Alpha3Error {
|
||||||
fn from(_: DescriptorError) -> Self {
|
fn from(_: DescriptorError) -> Self {
|
||||||
Alpha3Error::Generic
|
Alpha3Error::Generic
|
||||||
@ -216,7 +230,7 @@ impl From<BdkEsploraError> for EsploraError {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use crate::error::EsploraError;
|
use crate::error::{EsploraError, PersistenceError};
|
||||||
use crate::CalculateFeeError;
|
use crate::CalculateFeeError;
|
||||||
use crate::OutPoint;
|
use crate::OutPoint;
|
||||||
|
|
||||||
@ -317,4 +331,16 @@ mod test {
|
|||||||
assert_eq!(error.to_string(), expected_message);
|
assert_eq!(error.to_string(), expected_message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_persistence_error() {
|
||||||
|
let io_err = std::io::Error::new(
|
||||||
|
std::io::ErrorKind::Other,
|
||||||
|
"unable to persist the new address",
|
||||||
|
);
|
||||||
|
let op_err: PersistenceError = io_err.into();
|
||||||
|
|
||||||
|
let PersistenceError::Write { e } = op_err;
|
||||||
|
assert_eq!(e, "unable to persist the new address");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ use crate::wallet::TxBuilder;
|
|||||||
use crate::wallet::Update;
|
use crate::wallet::Update;
|
||||||
use crate::wallet::Wallet;
|
use crate::wallet::Wallet;
|
||||||
|
|
||||||
|
use crate::error::PersistenceError;
|
||||||
use crate::error::WalletCreationError;
|
use crate::error::WalletCreationError;
|
||||||
use bdk::bitcoin::Network;
|
use bdk::bitcoin::Network;
|
||||||
use bdk::keys::bip39::WordCount;
|
use bdk::keys::bip39::WordCount;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction};
|
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction};
|
||||||
use crate::descriptor::Descriptor;
|
use crate::descriptor::Descriptor;
|
||||||
use crate::error::{Alpha3Error, CalculateFeeError, WalletCreationError};
|
use crate::error::{Alpha3Error, CalculateFeeError, PersistenceError, WalletCreationError};
|
||||||
use crate::types::ScriptAmount;
|
use crate::types::ScriptAmount;
|
||||||
use crate::types::{Balance, FeeRate};
|
use crate::types::{Balance, FeeRate};
|
||||||
use crate::Script;
|
use crate::Script;
|
||||||
@ -67,13 +67,12 @@ impl Wallet {
|
|||||||
pub fn try_get_internal_address(
|
pub fn try_get_internal_address(
|
||||||
&self,
|
&self,
|
||||||
address_index: AddressIndex,
|
address_index: AddressIndex,
|
||||||
) -> Result<AddressInfo, Alpha3Error> {
|
) -> Result<AddressInfo, PersistenceError> {
|
||||||
self.get_wallet()
|
let address_info = self
|
||||||
.try_get_internal_address(address_index.into())
|
.get_wallet()
|
||||||
.map_or_else(
|
.try_get_internal_address(address_index.into())?
|
||||||
|_| Err(Alpha3Error::Generic),
|
.into();
|
||||||
|address_info| Ok(address_info.into()),
|
Ok(address_info)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn network(&self) -> Network {
|
pub fn network(&self) -> Network {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user