use std::sync::Arc;
use cdk_common::bitcoin;
use super::payment_request::PaymentRequest;
#[derive(Debug, Clone, Copy, PartialEq, Eq, uniffi::Enum)]
pub enum BitcoinNetwork {
Bitcoin,
Testnet,
Signet,
Regtest,
}
impl From<BitcoinNetwork> for bitcoin::Network {
fn from(network: BitcoinNetwork) -> Self {
match network {
BitcoinNetwork::Bitcoin => bitcoin::Network::Bitcoin,
BitcoinNetwork::Testnet => bitcoin::Network::Testnet,
BitcoinNetwork::Signet => bitcoin::Network::Signet,
BitcoinNetwork::Regtest => bitcoin::Network::Regtest,
}
}
}
impl From<bitcoin::Network> for BitcoinNetwork {
fn from(network: bitcoin::Network) -> Self {
match network {
bitcoin::Network::Bitcoin => BitcoinNetwork::Bitcoin,
bitcoin::Network::Testnet => BitcoinNetwork::Testnet,
bitcoin::Network::Signet => BitcoinNetwork::Signet,
bitcoin::Network::Regtest => BitcoinNetwork::Regtest,
_ => BitcoinNetwork::Bitcoin,
}
}
}
#[derive(Debug, Clone, uniffi::Record)]
pub struct ParsedPaymentInstruction {
pub cashu_requests: Vec<Arc<PaymentRequest>>,
pub bolt11_invoices: Vec<String>,
pub bolt12_offers: Vec<String>,
pub onchain_addresses: Vec<String>,
pub description: Option<String>,
pub amount_msats: Option<u64>,
pub is_configurable_amount: bool,
}
impl From<cdk::wallet::bip321::ParsedPaymentInstruction> for ParsedPaymentInstruction {
fn from(parsed: cdk::wallet::bip321::ParsedPaymentInstruction) -> Self {
let cashu_requests = parsed
.cashu_requests
.into_iter()
.map(|req| Arc::new(PaymentRequest::from_inner(req)))
.collect();
Self {
cashu_requests,
bolt11_invoices: parsed.bolt11_invoices,
bolt12_offers: parsed.bolt12_offers,
onchain_addresses: parsed.onchain_addresses,
description: parsed.description,
amount_msats: parsed.amount_msats,
is_configurable_amount: parsed.is_configurable_amount,
}
}
}