Skip to content

Commit 388ae5c

Browse files
committed
invoice: make chain non-optional
1 parent 9bd43f3 commit 388ae5c

File tree

3 files changed

+23
-23
lines changed

3 files changed

+23
-23
lines changed

src/invoice/builder.rs

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

3434
impl RgbInvoiceBuilder {
3535
pub fn new(beneficiary: impl Into<Beneficiary>) -> Self {
36+
let beneficiary = beneficiary.into();
3637
Self(RgbInvoice {
3738
transports: vec![RgbTransport::UnspecifiedMeans],
3839
contract: None,
3940
iface: None,
4041
operation: None,
4142
assignment: None,
42-
beneficiary: beneficiary.into(),
43+
chain: beneficiary.chain_info().unwrap_or(Chain::Bitcoin),
44+
beneficiary,
4345
owned_state: TypedState::Void,
44-
chain: None,
4546
expiry: None,
4647
unknown_query: none!(),
4748
})
@@ -127,7 +128,7 @@ impl RgbInvoiceBuilder {
127128
chain2 != Chain::Regtest => {}
128129
_ => return Err(self),
129130
}
130-
self.0.chain = Some(chain);
131+
self.0.chain = chain;
131132
Ok(self)
132133
}
133134

src/invoice/invoice.rs

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

src/invoice/parse.rs

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

142138
#[inline]
@@ -387,7 +383,7 @@ impl FromStr for RgbInvoice {
387383
assignment: None,
388384
beneficiary,
389385
owned_state: value,
390-
chain,
386+
chain: chain.unwrap_or(Chain::Bitcoin),
391387
expiry,
392388
unknown_query: query_params,
393389
})
@@ -486,7 +482,10 @@ mod test {
486482
.set_chain(Chain::Testnet3)
487483
.unwrap()
488484
.finish();
489-
assert_eq!(invoice.to_string(), "rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk");
485+
assert_eq!(
486+
invoice.to_string(),
487+
"rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk?chain=testnet"
488+
);
490489

491490
// address-based regtest - mismatching
492491
assert!(
@@ -502,44 +501,44 @@ mod test {
502501
"rgb:~/RGB20/utxob:egXsFnw-5Eud7WKYn-7DVQvcPbc-rR69YmgmG-veacwmUFo-uMFKFb",
503502
)
504503
.unwrap();
505-
assert_eq!(invoice.chain, None);
504+
assert_eq!(invoice.chain, Chain::Bitcoin);
506505

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

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

521520
let invoice = RgbInvoice::from_str(
522521
"rgb:~/RGB20/utxob:egXsFnw-5Eud7WKYn-7DVQvcPbc-rR69YmgmG-veacwmUFo-uMFKFb?chain=signet",
523522
)
524523
.unwrap();
525-
assert_eq!(invoice.chain, Some(Chain::Signet));
524+
assert_eq!(invoice.chain, Chain::Signet);
526525

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

534533
let invoice =
535534
RgbInvoice::from_str("rgb:~/RGB20/bc1qpws79r3ea4yy2ujsahwrmy2gutdj8w5whnhket").unwrap();
536-
assert_eq!(invoice.chain, None);
535+
assert_eq!(invoice.chain, Chain::Bitcoin);
537536

538537
let invoice = RgbInvoice::from_str(
539538
"rgb:~/RGB20/bc1qpws79r3ea4yy2ujsahwrmy2gutdj8w5whnhket?chain=bitcoin",
540539
)
541540
.unwrap();
542-
assert_eq!(invoice.chain, Some(Chain::Bitcoin));
541+
assert_eq!(invoice.chain, Chain::Bitcoin);
543542

544543
assert_eq!(
545544
RgbInvoice::from_str(
@@ -554,12 +553,12 @@ mod test {
554553
let invoice =
555554
RgbInvoice::from_str("rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk?chain=testnet")
556555
.unwrap();
557-
assert_eq!(invoice.chain, Some(Chain::Testnet3));
556+
assert_eq!(invoice.chain, Chain::Testnet3);
558557

559558
let invoice =
560559
RgbInvoice::from_str("rgb:~/RGB20/mxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk?chain=signet")
561560
.unwrap();
562-
assert_eq!(invoice.chain, Some(Chain::Signet));
561+
assert_eq!(invoice.chain, Chain::Signet);
563562

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

0 commit comments

Comments
 (0)