use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct LndListAddressesResponse {
pub account_with_addresses: Vec<AccountWithAddresses>,
}
impl LndListAddressesResponse {
#[must_use]
pub fn find_addresses(
&self,
account_name: &str,
address_type: &OnchainAddressType,
) -> Vec<LndAddressProperty> {
self.account_with_addresses
.iter()
.find(|account| account.name == account_name && &account.address_type == address_type)
.map(|account| account.addresses.clone())
.unwrap_or_default()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct AccountWithAddresses {
pub name: String,
pub address_type: OnchainAddressType,
pub derivation_path: String,
pub addresses: Vec<LndAddressProperty>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum OnchainAddressType {
#[serde(rename = "UNKNOWN")]
Unknown = 0,
#[serde(rename = "WITNESS_PUBKEY_HASH")]
WitnessPubkeyHash = 1,
#[serde(rename = "NESTED_WITNESS_PUBKEY_HASH")]
NestedWitnessPubkeyHash = 2,
#[serde(rename = "HYBRID_NESTED_WITNESS_PUBKEY_HASH")]
HybridNestedWitnessPubkeyHash = 3,
#[serde(rename = "TAPROOT_PUBKEY")]
TaprootPubkey = 4,
}
impl AsRef<str> for OnchainAddressType {
fn as_ref(&self) -> &str {
match self {
Self::Unknown => "UNKNOWN",
Self::WitnessPubkeyHash => "WITNESS_PUBKEY_HASH",
Self::NestedWitnessPubkeyHash => "NESTED_WITNESS_PUBKEY_HASH",
Self::HybridNestedWitnessPubkeyHash => "HYBRID_NESTED_WITNESS_PUBKEY_HASH",
Self::TaprootPubkey => "TAPROOT_PUBKEY",
}
}
}
impl AsRef<u32> for OnchainAddressType {
fn as_ref(&self) -> &u32 {
match self {
Self::Unknown => &0,
Self::WitnessPubkeyHash => &1,
Self::NestedWitnessPubkeyHash => &2,
Self::HybridNestedWitnessPubkeyHash => &3,
Self::TaprootPubkey => &4,
}
}
}
impl AsRef<u8> for OnchainAddressType {
fn as_ref(&self) -> &u8 {
match self {
Self::Unknown => &0,
Self::WitnessPubkeyHash => &1,
Self::NestedWitnessPubkeyHash => &2,
Self::HybridNestedWitnessPubkeyHash => &3,
Self::TaprootPubkey => &4,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct LndAddressProperty {
pub address: String,
pub is_internal: bool,
pub balance: String,
pub derivation_path: String,
pub public_key: String,
}