refactor: use tuple struct for address type

This commit is contained in:
thunderbiscuit 2024-04-26 14:49:41 -04:00
parent df64a96dd2
commit f6cc63539d
No known key found for this signature in database
GPG Key ID: 88253696EB836462

View File

@ -39,18 +39,14 @@ impl From<BdkScriptBuf> for Script {
} }
#[derive(Debug, PartialEq, Eq)] #[derive(Debug, PartialEq, Eq)]
pub struct Address { pub struct Address(BdkAddress<NetworkChecked>);
inner: BdkAddress<NetworkChecked>,
}
impl Address { impl Address {
pub fn new(address: String, network: Network) -> Result<Self, AddressError> { pub fn new(address: String, network: Network) -> Result<Self, AddressError> {
let parsed_address = address.parse::<bdk::bitcoin::Address<NetworkUnchecked>>()?; let parsed_address = address.parse::<bdk::bitcoin::Address<NetworkUnchecked>>()?;
let network_checked_address = parsed_address.require_network(network)?; let network_checked_address = parsed_address.require_network(network)?;
Ok(Address { Ok(Address(network_checked_address))
inner: network_checked_address,
})
} }
/// alternative constructor /// alternative constructor
@ -76,23 +72,23 @@ impl Address {
// } // }
pub fn network(&self) -> Network { pub fn network(&self) -> Network {
*self.inner.network() *self.0.network()
} }
pub fn script_pubkey(&self) -> Arc<Script> { pub fn script_pubkey(&self) -> Arc<Script> {
Arc::new(Script(self.inner.script_pubkey())) Arc::new(Script(self.0.script_pubkey()))
} }
pub fn to_qr_uri(&self) -> String { pub fn to_qr_uri(&self) -> String {
self.inner.to_qr_uri() self.0.to_qr_uri()
} }
pub fn as_string(&self) -> String { pub fn as_string(&self) -> String {
self.inner.to_string() self.0.to_string()
} }
pub fn is_valid_for_network(&self, network: Network) -> bool { pub fn is_valid_for_network(&self, network: Network) -> bool {
let address_str = self.inner.to_string(); let address_str = self.0.to_string();
if let Ok(unchecked_address) = address_str.parse::<BdkAddress<NetworkUnchecked>>() { if let Ok(unchecked_address) = address_str.parse::<BdkAddress<NetworkUnchecked>>() {
unchecked_address.is_valid_for_network(network) unchecked_address.is_valid_for_network(network)
} else { } else {
@ -103,13 +99,13 @@ impl Address {
impl From<Address> for BdkAddress { impl From<Address> for BdkAddress {
fn from(address: Address) -> Self { fn from(address: Address) -> Self {
address.inner address.0
} }
} }
impl From<BdkAddress> for Address { impl From<BdkAddress> for Address {
fn from(address: BdkAddress) -> Self { fn from(address: BdkAddress) -> Self {
Address { inner: address } Address(address)
} }
} }