bright-ln-models 0.1.0

Models for the working with LND nodes
Documentation
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,
}