+/// A handler for an [`OnionMessage`] containing an async payments message as its payload.
+///
+/// [`OnionMessage`]: crate::ln::msgs::OnionMessage
+pub trait AsyncPaymentsMessageHandler {
+ /// Handle a [`HeldHtlcAvailable`] message. A [`ReleaseHeldHtlc`] should be returned to release
+ /// the held funds.
+ fn held_htlc_available(
+ &self, message: HeldHtlcAvailable, responder: Option<Responder>,
+ ) -> ResponseInstruction<ReleaseHeldHtlc>;
+
+ /// Handle a [`ReleaseHeldHtlc`] message. If authentication of the message succeeds, an HTLC
+ /// should be released to the corresponding payee.
+ fn release_held_htlc(&self, message: ReleaseHeldHtlc);
+
+ /// Release any [`AsyncPaymentsMessage`]s that need to be sent.
+ ///
+ /// Typically, this is used for messages initiating an async payment flow rather than in response
+ /// to another message.
+ #[cfg(not(c_bindings))]
+ fn release_pending_messages(&self) -> Vec<PendingOnionMessage<AsyncPaymentsMessage>> {
+ vec![]
+ }
+
+ /// Release any [`AsyncPaymentsMessage`]s that need to be sent.
+ ///
+ /// Typically, this is used for messages initiating a payment flow rather than in response to
+ /// another message.
+ #[cfg(c_bindings)]
+ fn release_pending_messages(
+ &self,
+ ) -> Vec<(
+ AsyncPaymentsMessage,
+ crate::onion_message::messenger::Destination,
+ Option<crate::blinded_path::BlindedPath>,
+ )> {
+ vec![]
+ }
+}
+