Skip to content

Commit d452bb6

Browse files
committed
invoice: make chain non-optional
1 parent 68cd0ec commit d452bb6

File tree

3 files changed

+23
-23
lines changed

3 files changed

+23
-23
lines changed

invoice/src/builder.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,16 @@ pub struct RgbInvoiceBuilder(RgbInvoice);
3232

3333
impl RgbInvoiceBuilder {
3434
pub fn new(beneficiary: impl Into<Beneficiary>) -> Self {
35+
let beneficiary = beneficiary.into();
3536
Self(RgbInvoice {
3637
transports: vec![RgbTransport::UnspecifiedMeans],
3738
contract: None,
3839
iface: None,
3940
operation: None,
4041
assignment: None,
41-
beneficiary: beneficiary.into(),
42+
chain: beneficiary.chain_info().unwrap_or(Chain::Bitcoin),
43+
beneficiary,
4244
owned_state: TypedState::Void,
43-
chain: None,
4445
expiry: None,
4546
unknown_query: none!(),
4647
})
@@ -126,7 +127,7 @@ impl RgbInvoiceBuilder {
126127
chain2 != Chain::Regtest => {}
127128
_ => return Err(self),
128129
}
129-
self.0.chain = Some(chain);
130+
self.0.chain = chain;
130131
Ok(self)
131132
}
132133

invoice/src/invoice.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ pub struct RgbInvoice {
8686
pub assignment: Option<FieldName>,
8787
pub beneficiary: Beneficiary,
8888
pub owned_state: TypedState,
89-
pub chain: Option<Chain>,
89+
pub chain: Chain,
9090
/// UTC unix timestamp
9191
pub expiry: Option<i64>,
9292
pub unknown_query: IndexMap<String, String>,

invoice/src/parse.rs

+18-19
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,11 @@ pub enum InvoiceParseError {
127127
impl RgbInvoice {
128128
#[inline]
129129
fn non_default_chain(&self) -> Option<Chain> {
130-
if self.beneficiary.has_chain_info() {
131-
return None;
132-
}
133-
if let Some(chain) = self.chain {
134-
if chain != Chain::Bitcoin {
135-
return Some(chain);
136-
}
130+
if self.chain == Chain::Bitcoin {
131+
None
132+
} else {
133+
Some(self.chain)
137134
}
138-
None
139135
}
140136

141137
#[inline]
@@ -384,7 +380,7 @@ impl FromStr for RgbInvoice {
384380
assignment: None,
385381
beneficiary,
386382
owned_state: value,
387-
chain,
383+
chain: chain.unwrap_or(Chain::Bitcoin),
388384
expiry,
389385
unknown_query: query_params,
390386
})
@@ -483,7 +479,10 @@ mod test {
483479
.set_chain(Chain::Testnet3)
484480
.unwrap()
485481
.finish();
486-
assert_eq!(invoice.to_string(), "rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk");
482+
assert_eq!(
483+
invoice.to_string(),
484+
"rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk?chain=testnet"
485+
);
487486

488487
// address-based regtest - mismatching
489488
assert!(
@@ -499,44 +498,44 @@ mod test {
499498
"rgb:~/RGB20/utxob:egXsFnw-5Eud7WKYn-7DVQvcPbc-rR69YmgmG-veacwmUFo-uMFKFb",
500499
)
501500
.unwrap();
502-
assert_eq!(invoice.chain, None);
501+
assert_eq!(invoice.chain, Chain::Bitcoin);
503502

504503
let invoice = RgbInvoice::from_str(
505504
"rgb:~/RGB20/utxob:egXsFnw-5Eud7WKYn-7DVQvcPbc-rR69YmgmG-veacwmUFo-uMFKFb?\
506505
chain=testnet",
507506
)
508507
.unwrap();
509-
assert_eq!(invoice.chain, Some(Chain::Testnet3));
508+
assert_eq!(invoice.chain, Chain::Testnet3);
510509

511510
let invoice = RgbInvoice::from_str(
512511
"rgb:~/RGB20/utxob:egXsFnw-5Eud7WKYn-7DVQvcPbc-rR69YmgmG-veacwmUFo-uMFKFb?\
513512
chain=testnet3",
514513
)
515514
.unwrap();
516-
assert_eq!(invoice.chain, Some(Chain::Testnet3));
515+
assert_eq!(invoice.chain, Chain::Testnet3);
517516

518517
let invoice = RgbInvoice::from_str(
519518
"rgb:~/RGB20/utxob:egXsFnw-5Eud7WKYn-7DVQvcPbc-rR69YmgmG-veacwmUFo-uMFKFb?chain=signet",
520519
)
521520
.unwrap();
522-
assert_eq!(invoice.chain, Some(Chain::Signet));
521+
assert_eq!(invoice.chain, Chain::Signet);
523522

524523
let invoice = RgbInvoice::from_str(
525524
"rgb:~/RGB20/utxob:egXsFnw-5Eud7WKYn-7DVQvcPbc-rR69YmgmG-veacwmUFo-uMFKFb?\
526525
chain=regtest",
527526
)
528527
.unwrap();
529-
assert_eq!(invoice.chain, Some(Chain::Regtest));
528+
assert_eq!(invoice.chain, Chain::Regtest);
530529

531530
let invoice =
532531
RgbInvoice::from_str("rgb:~/RGB20/bc1qpws79r3ea4yy2ujsahwrmy2gutdj8w5whnhket").unwrap();
533-
assert_eq!(invoice.chain, None);
532+
assert_eq!(invoice.chain, Chain::Bitcoin);
534533

535534
let invoice = RgbInvoice::from_str(
536535
"rgb:~/RGB20/bc1qpws79r3ea4yy2ujsahwrmy2gutdj8w5whnhket?chain=bitcoin",
537536
)
538537
.unwrap();
539-
assert_eq!(invoice.chain, Some(Chain::Bitcoin));
538+
assert_eq!(invoice.chain, Chain::Bitcoin);
540539

541540
assert_eq!(
542541
RgbInvoice::from_str(
@@ -551,12 +550,12 @@ mod test {
551550
let invoice =
552551
RgbInvoice::from_str("rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk?chain=testnet")
553552
.unwrap();
554-
assert_eq!(invoice.chain, Some(Chain::Testnet3));
553+
assert_eq!(invoice.chain, Chain::Testnet3);
555554

556555
let invoice =
557556
RgbInvoice::from_str("rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk?chain=signet")
558557
.unwrap();
559-
assert_eq!(invoice.chain, Some(Chain::Signet));
558+
assert_eq!(invoice.chain, Chain::Signet);
560559

561560
assert_eq!(
562561
RgbInvoice::from_str("rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk?chain=regtest",),

0 commit comments

Comments
 (0)