v0.62.0
Breaking changes
#686 - make channel confirmations truly async
This changes the signature of the Handler::channel_open_* functions to allow you to make the channel accept/reject decision outside of the main event loop. Instead of immediately returning a bool, they take an additional reply: ChannelOpenHandle argument, which you can move into another async task to confirm or reject the channel later. After the handler function returns, the event loop is immediately unblocked.
This also lets you specify the protocol-level rejection reason.
Migrating your existing code:
async fn channel_open_session(
&mut self,
channel: Channel<Msg>,
+ reply: server::ChannelOpenHandle,
session: &mut Session,
- ) -> Result<bool, Self::Error> {
+ ) -> Result<(), Self::Error> {
if (...) {
- Ok(false)
+ reply.reject(ChannelOpenFailure::AdministrativelyProhibited).await;
} else {
- Ok(true)
+ reply.accept().await;
}
+ Ok(())
}Changes
New Contributors
- @wilsonglasser made their first contribution in #724
Full Changelog: v0.61.2...v0.62.0