From 175ec4b82b51b6b2d8222c270f013bd38b3cd840 Mon Sep 17 00:00:00 2001 From: benthecarman Date: Thu, 18 May 2023 13:59:07 -0500 Subject: [PATCH] Fix bug for parsing some strings with uri prefixes --- waila/src/lib.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/waila/src/lib.rs b/waila/src/lib.rs index b57504b..3ed5b77 100644 --- a/waila/src/lib.rs +++ b/waila/src/lib.rs @@ -155,19 +155,22 @@ impl FromStr for PaymentParams<'_> { fn from_str(str: &str) -> Result { let lower = str.to_lowercase(); if lower.starts_with("lightning:") { - return Invoice::from_str(str.strip_prefix("lightning:").unwrap()) + let str = str.strip_prefix("lightning:").unwrap(); + return Invoice::from_str(str) .map(PaymentParams::Bolt11) .or_else(|_| LnUrl::from_str(str).map(PaymentParams::LnUrl)) .or_else(|_| LightningAddress::from_str(str).map(PaymentParams::LightningAddress)) .or_else(|_| Offer::from_str(str).map(PaymentParams::Bolt12)) .map_err(|_| ()); } else if lower.starts_with("lnurl:") { - return LnUrl::from_str(str.strip_prefix("lnurl:").unwrap()) + let str = str.strip_prefix("lnurl:").unwrap(); + return LnUrl::from_str(str) .map(PaymentParams::LnUrl) .or_else(|_| LightningAddress::from_str(str).map(PaymentParams::LightningAddress)) .map_err(|_| ()); } else if lower.starts_with("lnurlp:") { - return LnUrl::from_str(str.strip_prefix("lnurlp:").unwrap()) + let str = str.strip_prefix("lnurlp:").unwrap(); + return LnUrl::from_str(str) .map(PaymentParams::LnUrl) .or_else(|_| LightningAddress::from_str(str).map(PaymentParams::LightningAddress)) .map_err(|_| ()); @@ -345,6 +348,8 @@ mod tests { fn parse_lnurl_with_prefix() { let parsed = PaymentParams::from_str(&format!("lnurl:{SAMPLE_LNURL}")).unwrap(); let parsed_lnurlp = PaymentParams::from_str(&format!("lnurlp:{SAMPLE_LNURL}")).unwrap(); + let parsed_lightning = + PaymentParams::from_str(&format!("lightning:{SAMPLE_LNURL}")).unwrap(); assert_eq!(parsed.amount(), None); assert_eq!(parsed.address(), None); @@ -354,6 +359,7 @@ mod tests { assert_eq!(parsed.node_pubkey(), None); assert_eq!(parsed.lnurl(), Some(LnUrl::from_str(SAMPLE_LNURL).unwrap())); assert_eq!(parsed.lnurl(), parsed_lnurlp.lnurl()); + assert_eq!(parsed.lnurl(), parsed_lightning.lnurl()); } #[test] @@ -368,4 +374,17 @@ mod tests { assert_eq!(parsed.node_pubkey(), None); assert_eq!(parsed.lnurl(), Some(LnUrl::from_str("lnurl1dp68gurn8ghj7mmswfjhgatjde3x7apwvdhk6tewwajkcmpdddhx7amw9akxuatjd3cz7cn9dc94s6d4").unwrap())); } + + #[test] + fn parse_lightning_address_with_prefix() { + let parsed = PaymentParams::from_str("lightning:ben@opreturnbot.com").unwrap(); + + assert_eq!(parsed.amount(), None); + assert_eq!(parsed.address(), None); + assert_eq!(parsed.memo(), None); + assert_eq!(parsed.network(), None); + assert_eq!(parsed.invoice(), None); + assert_eq!(parsed.node_pubkey(), None); + assert_eq!(parsed.lnurl(), Some(LnUrl::from_str("lnurl1dp68gurn8ghj7mmswfjhgatjde3x7apwvdhk6tewwajkcmpdddhx7amw9akxuatjd3cz7cn9dc94s6d4").unwrap())); + } }