@@ -502,6 +502,12 @@ impl_writeable_tlv_based_enum!(InterceptNextHop,
502
502
#[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
503
503
pub enum PaymentFailureReason {
504
504
/// The intended recipient rejected our payment.
505
+ ///
506
+ /// Also used for [`UnknownRequiredFeatures`] and [`InvoiceRequestRejected`] when downgrading to
507
+ /// version prior to 0.0.124.
508
+ ///
509
+ /// [`UnknownRequiredFeatures`]: Self::UnknownRequiredFeatures
510
+ /// [`InvoiceRequestRejected`]: Self::InvoiceRequestRejected
505
511
RecipientRejected ,
506
512
/// The user chose to abandon this payment by calling [`ChannelManager::abandon_payment`].
507
513
///
@@ -517,7 +523,10 @@ pub enum PaymentFailureReason {
517
523
/// The payment expired while retrying, based on the provided
518
524
/// [`PaymentParameters::expiry_time`].
519
525
///
526
+ /// Also used for [`InvoiceRequestExpired`] when downgrading to version prior to 0.0.124.
527
+ ///
520
528
/// [`PaymentParameters::expiry_time`]: crate::routing::router::PaymentParameters::expiry_time
529
+ /// [`InvoiceRequestExpired`]: Self::InvoiceRequestExpired
521
530
PaymentExpired ,
522
531
/// We failed to find a route while retrying the payment.
523
532
///
@@ -1556,10 +1565,22 @@ impl Writeable for Event {
1556
1565
None => ( & PaymentHash ( [ 0 ; 32 ] ) , false ) ,
1557
1566
} ;
1558
1567
let legacy_reason = match reason {
1559
- Some ( PaymentFailureReason :: UnknownRequiredFeatures )
1560
- | Some ( PaymentFailureReason :: InvoiceRequestExpired )
1561
- | Some ( PaymentFailureReason :: InvoiceRequestRejected ) => & None ,
1562
- reason => reason,
1568
+ None => & None ,
1569
+ // Variants available prior to version 0.0.124.
1570
+ Some ( PaymentFailureReason :: RecipientRejected )
1571
+ | Some ( PaymentFailureReason :: UserAbandoned )
1572
+ | Some ( PaymentFailureReason :: RetriesExhausted )
1573
+ | Some ( PaymentFailureReason :: PaymentExpired )
1574
+ | Some ( PaymentFailureReason :: RouteNotFound )
1575
+ | Some ( PaymentFailureReason :: UnexpectedError ) => reason,
1576
+ // Variants introduced at version 0.0.124 or later. Prior versions fail to parse
1577
+ // unknown variants, while versions 0.0.124 or later will use None.
1578
+ Some ( PaymentFailureReason :: UnknownRequiredFeatures ) =>
1579
+ & Some ( PaymentFailureReason :: RecipientRejected ) ,
1580
+ Some ( PaymentFailureReason :: InvoiceRequestExpired ) =>
1581
+ & Some ( PaymentFailureReason :: RetriesExhausted ) ,
1582
+ Some ( PaymentFailureReason :: InvoiceRequestRejected ) =>
1583
+ & Some ( PaymentFailureReason :: RecipientRejected ) ,
1563
1584
} ;
1564
1585
write_tlv_fields ! ( writer, {
1565
1586
( 0 , payment_id, required) ,
0 commit comments