@@ -367,7 +367,7 @@ impl Responder {
367
367
/// Use when the recipient doesn't need to send back a reply to us.
368
368
pub fn respond ( self ) -> ResponseInstruction {
369
369
ResponseInstruction {
370
- send_path : self . reply_path ,
370
+ destination : Destination :: BlindedPath ( self . reply_path ) ,
371
371
context : None ,
372
372
}
373
373
}
@@ -377,7 +377,7 @@ impl Responder {
377
377
/// Use when the recipient needs to send back a reply to us.
378
378
pub fn respond_with_reply_path ( self , context : MessageContext ) -> ResponseInstruction {
379
379
ResponseInstruction {
380
- send_path : self . reply_path ,
380
+ destination : Destination :: BlindedPath ( self . reply_path ) ,
381
381
context : Some ( context) ,
382
382
}
383
383
}
@@ -386,17 +386,16 @@ impl Responder {
386
386
/// Instructions for how and where to send the response to an onion message.
387
387
#[ derive( Clone ) ]
388
388
pub struct ResponseInstruction {
389
- send_path : BlindedMessagePath ,
389
+ /// The destination in a response is always a [`Destination::BlindedPath`] but using a
390
+ /// [`Destination`] rather than an explicit [`BlindedMessagePath`] simplifies the logic in
391
+ /// [`OnionMessenger::send_onion_message_internal`] somewhat.
392
+ destination : Destination ,
390
393
context : Option < MessageContext > ,
391
394
}
392
395
393
396
impl ResponseInstruction {
394
397
fn into_instructions ( self ) -> MessageSendInstructions {
395
- let destination = Destination :: BlindedPath ( self . send_path ) ;
396
- match self . context {
397
- Some ( context) => MessageSendInstructions :: WithReplyPath { destination, context } ,
398
- None => MessageSendInstructions :: WithoutReplyPath { destination } ,
399
- }
398
+ MessageSendInstructions :: ForReply { instructions : self }
400
399
}
401
400
}
402
401
@@ -425,7 +424,12 @@ pub enum MessageSendInstructions {
425
424
WithoutReplyPath {
426
425
/// The destination where we need to send our message.
427
426
destination : Destination ,
428
- }
427
+ } ,
428
+ /// Indicates that a message is being sent as a reply to a received message.
429
+ ForReply {
430
+ /// The instructions provided by the [`Responder`].
431
+ instructions : ResponseInstruction ,
432
+ } ,
429
433
}
430
434
431
435
/// A trait defining behavior for routing an [`OnionMessage`].
@@ -1158,7 +1162,9 @@ where
1158
1162
let ( destination, reply_path) = match instructions {
1159
1163
MessageSendInstructions :: WithSpecifiedReplyPath { destination, reply_path } =>
1160
1164
( destination, Some ( reply_path) ) ,
1161
- MessageSendInstructions :: WithReplyPath { destination, context } => {
1165
+ MessageSendInstructions :: WithReplyPath { destination, context }
1166
+ |MessageSendInstructions :: ForReply { instructions : ResponseInstruction { destination, context : Some ( context) } } =>
1167
+ {
1162
1168
match self . create_blinded_path ( context) {
1163
1169
Ok ( reply_path) => ( destination, Some ( reply_path) ) ,
1164
1170
Err ( err) => {
@@ -1171,7 +1177,8 @@ where
1171
1177
}
1172
1178
}
1173
1179
} ,
1174
- MessageSendInstructions :: WithoutReplyPath { destination } =>
1180
+ MessageSendInstructions :: WithoutReplyPath { destination }
1181
+ |MessageSendInstructions :: ForReply { instructions : ResponseInstruction { destination, context : None } } =>
1175
1182
( destination, None ) ,
1176
1183
} ;
1177
1184
0 commit comments