bright_ln_models/
onchain.rs1use 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}