mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-29 17:51:35 +00:00
feat(swarm): make stream uprade errors more ergonomic
The currently provided `ConnectionHandlerUpgrErr` is very hard to use. Not only does it have a long name, it also features 3 levels of nesting which results in a lot of boilerplate. Last but not least, it exposes `multistream-select` as a dependency to all protocols. We fix all of the above by renaming the type to `StreamUpgradeError` and flattening out its interface. Unrecoverable errors during protocol selection are hidden within the `Io` variant. Related: #3759. Pull-Request: #3882.
This commit is contained in:
@ -25,8 +25,8 @@ use libp2p_identity::PeerId;
|
||||
use libp2p_identity::PublicKey;
|
||||
use libp2p_swarm::behaviour::{ConnectionClosed, ConnectionEstablished, DialFailure, FromSwarm};
|
||||
use libp2p_swarm::{
|
||||
AddressScore, ConnectionDenied, ConnectionHandlerUpgrErr, DialError, ExternalAddresses,
|
||||
ListenAddresses, NetworkBehaviour, NotifyHandler, PollParameters, StreamProtocol,
|
||||
AddressScore, ConnectionDenied, DialError, ExternalAddresses, ListenAddresses,
|
||||
NetworkBehaviour, NotifyHandler, PollParameters, StreamProtocol, StreamUpgradeError,
|
||||
THandlerInEvent, ToSwarm,
|
||||
};
|
||||
use libp2p_swarm::{ConnectionId, THandler, THandlerOutEvent};
|
||||
@ -492,7 +492,7 @@ pub enum Event {
|
||||
/// The peer with whom the error originated.
|
||||
peer_id: PeerId,
|
||||
/// The error that occurred.
|
||||
error: ConnectionHandlerUpgrErr<UpgradeError>,
|
||||
error: StreamUpgradeError<UpgradeError>,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,8 @@ use libp2p_swarm::handler::{
|
||||
ConnectionEvent, DialUpgradeError, FullyNegotiatedInbound, FullyNegotiatedOutbound,
|
||||
};
|
||||
use libp2p_swarm::{
|
||||
ConnectionHandler, ConnectionHandlerEvent, ConnectionHandlerUpgrErr, KeepAlive,
|
||||
NegotiatedSubstream, StreamProtocol, SubstreamProtocol,
|
||||
ConnectionHandler, ConnectionHandlerEvent, KeepAlive, NegotiatedSubstream, StreamProtocol,
|
||||
StreamUpgradeError, SubstreamProtocol,
|
||||
};
|
||||
use log::warn;
|
||||
use smallvec::SmallVec;
|
||||
@ -111,7 +111,7 @@ pub enum Event {
|
||||
/// We received a request for identification.
|
||||
Identify,
|
||||
/// Failed to identify the remote, or to reply to an identification request.
|
||||
IdentificationError(ConnectionHandlerUpgrErr<UpgradeError>),
|
||||
IdentificationError(StreamUpgradeError<UpgradeError>),
|
||||
}
|
||||
|
||||
impl Handler {
|
||||
@ -205,13 +205,7 @@ impl Handler {
|
||||
<Self as ConnectionHandler>::OutboundProtocol,
|
||||
>,
|
||||
) {
|
||||
use libp2p_core::upgrade::UpgradeError;
|
||||
|
||||
let err = err.map_upgrade_err(|e| match e {
|
||||
UpgradeError::Select(e) => UpgradeError::Select(e),
|
||||
UpgradeError::Apply(Either::Left(ioe)) => UpgradeError::Apply(ioe),
|
||||
UpgradeError::Apply(Either::Right(ioe)) => UpgradeError::Apply(ioe),
|
||||
});
|
||||
let err = err.map_upgrade_err(|e| e.into_inner());
|
||||
self.events
|
||||
.push(ConnectionHandlerEvent::Custom(Event::IdentificationError(
|
||||
err,
|
||||
@ -317,9 +311,7 @@ impl ConnectionHandler for Handler {
|
||||
Event::Identification(peer_id),
|
||||
)),
|
||||
Poll::Ready(Some(Err(err))) => Poll::Ready(ConnectionHandlerEvent::Custom(
|
||||
Event::IdentificationError(ConnectionHandlerUpgrErr::Upgrade(
|
||||
libp2p_core::upgrade::UpgradeError::Apply(err),
|
||||
)),
|
||||
Event::IdentificationError(StreamUpgradeError::Apply(err)),
|
||||
)),
|
||||
Poll::Ready(None) | Poll::Pending => Poll::Pending,
|
||||
}
|
||||
|
Reference in New Issue
Block a user