mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-27 08:41:36 +00:00
refactor(core)!: remove EitherOutput
(#3341)
The trick with this one is to use `futures::Either` everywhere where we may wrap something that implements any of the `futures` traits. This includes the output of `EitherFuture` itself. We also need to implement `StreamMuxer` on `future::Either` because `StreamMuxer`s may be the the `Output` of `InboundUpgrade`.
This commit is contained in:
@ -20,12 +20,12 @@
|
||||
|
||||
use crate::handler::{
|
||||
ConnectionEvent, ConnectionHandler, ConnectionHandlerEvent, ConnectionHandlerUpgrErr,
|
||||
DialUpgradeError, FullyNegotiatedInbound, FullyNegotiatedOutbound, InboundUpgradeSend,
|
||||
IntoConnectionHandler, KeepAlive, ListenUpgradeError, OutboundUpgradeSend, SubstreamProtocol,
|
||||
FullyNegotiatedInbound, InboundUpgradeSend, IntoConnectionHandler, KeepAlive,
|
||||
ListenUpgradeError, SubstreamProtocol,
|
||||
};
|
||||
use crate::upgrade::SendWrapper;
|
||||
use either::Either;
|
||||
use libp2p_core::either::EitherOutput;
|
||||
use futures::future;
|
||||
use libp2p_core::upgrade::UpgradeError;
|
||||
use libp2p_core::{ConnectedPoint, PeerId};
|
||||
use std::task::{Context, Poll};
|
||||
@ -101,11 +101,11 @@ where
|
||||
) -> Either<FullyNegotiatedInbound<LIP, LIOI>, FullyNegotiatedInbound<RIP, RIOI>> {
|
||||
match self {
|
||||
FullyNegotiatedInbound {
|
||||
protocol: EitherOutput::First(protocol),
|
||||
protocol: future::Either::Left(protocol),
|
||||
info: Either::Left(info),
|
||||
} => Either::Left(FullyNegotiatedInbound { protocol, info }),
|
||||
FullyNegotiatedInbound {
|
||||
protocol: EitherOutput::Second(protocol),
|
||||
protocol: future::Either::Right(protocol),
|
||||
info: Either::Right(info),
|
||||
} => Either::Right(FullyNegotiatedInbound { protocol, info }),
|
||||
_ => unreachable!(),
|
||||
@ -113,98 +113,6 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
impl<LOP, ROP, LOOI, ROOI>
|
||||
FullyNegotiatedOutbound<Either<SendWrapper<LOP>, SendWrapper<ROP>>, Either<LOOI, ROOI>>
|
||||
where
|
||||
LOP: OutboundUpgradeSend,
|
||||
ROP: OutboundUpgradeSend,
|
||||
{
|
||||
fn transpose(
|
||||
self,
|
||||
) -> Either<FullyNegotiatedOutbound<LOP, LOOI>, FullyNegotiatedOutbound<ROP, ROOI>> {
|
||||
match self {
|
||||
FullyNegotiatedOutbound {
|
||||
protocol: EitherOutput::First(protocol),
|
||||
info: Either::Left(info),
|
||||
} => Either::Left(FullyNegotiatedOutbound { protocol, info }),
|
||||
FullyNegotiatedOutbound {
|
||||
protocol: EitherOutput::Second(protocol),
|
||||
info: Either::Right(info),
|
||||
} => Either::Right(FullyNegotiatedOutbound { protocol, info }),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<LOP, ROP, LOOI, ROOI>
|
||||
DialUpgradeError<Either<LOOI, ROOI>, Either<SendWrapper<LOP>, SendWrapper<ROP>>>
|
||||
where
|
||||
LOP: OutboundUpgradeSend,
|
||||
ROP: OutboundUpgradeSend,
|
||||
{
|
||||
fn transpose(self) -> Either<DialUpgradeError<LOOI, LOP>, DialUpgradeError<ROOI, ROP>> {
|
||||
match self {
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Apply(Either::Left(error))),
|
||||
info: Either::Left(info),
|
||||
} => Either::Left(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Apply(error)),
|
||||
info,
|
||||
}),
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Apply(Either::Right(error))),
|
||||
info: Either::Right(info),
|
||||
} => Either::Right(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Apply(error)),
|
||||
info,
|
||||
}),
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Select(error)),
|
||||
info: Either::Left(info),
|
||||
} => Either::Left(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Select(error)),
|
||||
info,
|
||||
}),
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Select(error)),
|
||||
info: Either::Right(info),
|
||||
} => Either::Right(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Upgrade(UpgradeError::Select(error)),
|
||||
info,
|
||||
}),
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timer,
|
||||
info: Either::Left(info),
|
||||
} => Either::Left(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timer,
|
||||
info,
|
||||
}),
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timer,
|
||||
info: Either::Right(info),
|
||||
} => Either::Right(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timer,
|
||||
info,
|
||||
}),
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timeout,
|
||||
info: Either::Left(info),
|
||||
} => Either::Left(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timeout,
|
||||
info,
|
||||
}),
|
||||
DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timeout,
|
||||
info: Either::Right(info),
|
||||
} => Either::Right(DialUpgradeError {
|
||||
error: ConnectionHandlerUpgrErr::Timeout,
|
||||
info,
|
||||
}),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<LIP, RIP, LIOI, RIOI>
|
||||
ListenUpgradeError<Either<LIOI, RIOI>, Either<SendWrapper<LIP>, SendWrapper<RIP>>>
|
||||
where
|
||||
|
Reference in New Issue
Block a user