bright_ln_models/
onchain.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
4pub struct LndListAddressesResponse {
5    pub account_with_addresses: Vec<AccountWithAddresses>,
6}
7impl LndListAddressesResponse {
8    #[must_use]
9    pub fn find_addresses(
10        &self,
11        account_name: &str,
12        address_type: &OnchainAddressType,
13    ) -> Vec<LndAddressProperty> {
14        self.account_with_addresses
15            .iter()
16            .find(|account| account.name == account_name && &account.address_type == address_type)
17            .map(|account| account.addresses.clone())
18            .unwrap_or_default()
19    }
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
23pub struct AccountWithAddresses {
24    pub name: String,
25    pub address_type: OnchainAddressType,
26    pub derivation_path: String,
27    pub addresses: Vec<LndAddressProperty>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
31pub enum OnchainAddressType {
32    #[serde(rename = "UNKNOWN")]
33    Unknown = 0,
34    #[serde(rename = "WITNESS_PUBKEY_HASH")]
35    WitnessPubkeyHash = 1,
36    #[serde(rename = "NESTED_WITNESS_PUBKEY_HASH")]
37    NestedWitnessPubkeyHash = 2,
38    #[serde(rename = "HYBRID_NESTED_WITNESS_PUBKEY_HASH")]
39    HybridNestedWitnessPubkeyHash = 3,
40    #[serde(rename = "TAPROOT_PUBKEY")]
41    TaprootPubkey = 4,
42}
43impl AsRef<str> for OnchainAddressType {
44    fn as_ref(&self) -> &str {
45        match self {
46            Self::Unknown => "UNKNOWN",
47            Self::WitnessPubkeyHash => "WITNESS_PUBKEY_HASH",
48            Self::NestedWitnessPubkeyHash => "NESTED_WITNESS_PUBKEY_HASH",
49            Self::HybridNestedWitnessPubkeyHash => "HYBRID_NESTED_WITNESS_PUBKEY_HASH",
50            Self::TaprootPubkey => "TAPROOT_PUBKEY",
51        }
52    }
53}
54impl AsRef<u32> for OnchainAddressType {
55    fn as_ref(&self) -> &u32 {
56        match self {
57            Self::Unknown => &0,
58            Self::WitnessPubkeyHash => &1,
59            Self::NestedWitnessPubkeyHash => &2,
60            Self::HybridNestedWitnessPubkeyHash => &3,
61            Self::TaprootPubkey => &4,
62        }
63    }
64}
65impl AsRef<u8> for OnchainAddressType {
66    fn as_ref(&self) -> &u8 {
67        match self {
68            Self::Unknown => &0,
69            Self::WitnessPubkeyHash => &1,
70            Self::NestedWitnessPubkeyHash => &2,
71            Self::HybridNestedWitnessPubkeyHash => &3,
72            Self::TaprootPubkey => &4,
73        }
74    }
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
78pub struct LndAddressProperty {
79    pub address: String,
80    pub is_internal: bool,
81    pub balance: String,
82    pub derivation_path: String,
83    pub public_key: String,
84}