Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

swarm/src/behaviour: Make NetworkBehaviourAction generic over TBehaviour #5

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 30 additions & 13 deletions swarm/src/behaviour.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ pub trait NetworkBehaviour: Send + 'static {
&mut self,
cx: &mut Context<'_>,
params: &mut impl PollParameters,
) -> Poll<NetworkBehaviourAction<Self::OutEvent, Self::ProtocolsHandler>>;
) -> Poll<NetworkBehaviourAction<Self>>;
}

/// Parameters passed to `poll()`, that the `NetworkBehaviour` has access to.
Expand Down Expand Up @@ -248,9 +248,10 @@ pub trait NetworkBehaviourEventProcess<TEvent> {
// handler itself untouched.
#[derive(Debug)]
pub enum NetworkBehaviourAction<
TOutEvent,
THandler: IntoProtocolsHandler,
TInEvent = THandlerInEvent<THandler>,
TBehaviour: NetworkBehaviour,
TOutEvent = crate::TBehaviourOutEvent<TBehaviour>,
THandler = crate::THandler<TBehaviour>,
TInEvent = crate::THandlerInEvent<TBehaviour>,
> {
/// Instructs the `Swarm` to return an event when it is being polled.
GenerateEvent(TOutEvent),
Expand Down Expand Up @@ -338,14 +339,24 @@ pub enum NetworkBehaviourAction<
},
}

impl<TOutEvent, THandler: IntoProtocolsHandler, TInEventOld>
NetworkBehaviourAction<TOutEvent, THandler, TInEventOld>
impl<TBehaviour: NetworkBehaviour, TInEventOld>
NetworkBehaviourAction<
TBehaviour,
crate::TBehaviourOutEvent<TBehaviour>,
crate::THandler<TBehaviour>,
TInEventOld,
>
{
/// Map the handler event.
pub fn map_in<TInEventNew>(
self,
f: impl FnOnce(TInEventOld) -> TInEventNew,
) -> NetworkBehaviourAction<TOutEvent, THandler, TInEventNew> {
) -> NetworkBehaviourAction<
TBehaviour,
crate::TBehaviourOutEvent<TBehaviour>,
crate::THandler<TBehaviour>,
TInEventNew,
> {
match self {
NetworkBehaviourAction::GenerateEvent(e) => NetworkBehaviourAction::GenerateEvent(e),
NetworkBehaviourAction::DialAddress { address, handler } => {
Expand Down Expand Up @@ -383,9 +394,12 @@ impl<TOutEvent, THandler: IntoProtocolsHandler, TInEventOld>
}
}

impl<TOutEvent, THandler: IntoProtocolsHandler> NetworkBehaviourAction<TOutEvent, THandler> {
impl<TBehaviour: NetworkBehaviour, TOutEvent> NetworkBehaviourAction<TBehaviour, TOutEvent> {
/// Map the event the swarm will return.
pub fn map_out<E>(self, f: impl FnOnce(TOutEvent) -> E) -> NetworkBehaviourAction<E, THandler> {
pub fn map_out<E>(
self,
f: impl FnOnce(TOutEvent) -> E,
) -> NetworkBehaviourAction<TBehaviour, E> {
match self {
NetworkBehaviourAction::GenerateEvent(e) => NetworkBehaviourAction::GenerateEvent(f(e)),
NetworkBehaviourAction::DialAddress { address, handler } => {
Expand Down Expand Up @@ -423,19 +437,22 @@ impl<TOutEvent, THandler: IntoProtocolsHandler> NetworkBehaviourAction<TOutEvent
}
}

impl<TInEvent, TOutEvent, THandlerOld> NetworkBehaviourAction<TOutEvent, THandlerOld>
impl<TBehaviour: NetworkBehaviour, THandlerOld>
NetworkBehaviourAction<TBehaviour, crate::TBehaviourOutEvent<TBehaviour>, THandlerOld>
where
THandlerOld: IntoProtocolsHandler,
<THandlerOld as IntoProtocolsHandler>::Handler: ProtocolsHandler<InEvent = TInEvent>,
<THandlerOld as IntoProtocolsHandler>::Handler:
ProtocolsHandler<InEvent = crate::THandlerInEvent<TBehaviour>>,
{
/// Map the handler event.
pub fn map_handler<THandlerNew>(
self,
f: impl FnOnce(THandlerOld) -> THandlerNew,
) -> NetworkBehaviourAction<TOutEvent, THandlerNew>
) -> NetworkBehaviourAction<TBehaviour, crate::TBehaviourOutEvent<TBehaviour>, THandlerNew>
where
THandlerNew: IntoProtocolsHandler,
<THandlerNew as IntoProtocolsHandler>::Handler: ProtocolsHandler<InEvent = TInEvent>,
<THandlerNew as IntoProtocolsHandler>::Handler:
ProtocolsHandler<InEvent = crate::THandlerInEvent<TBehaviour>>,
{
match self {
NetworkBehaviourAction::GenerateEvent(e) => NetworkBehaviourAction::GenerateEvent(e),
Expand Down
2 changes: 1 addition & 1 deletion swarm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1287,7 +1287,7 @@ impl NetworkBehaviour for DummyBehaviour {
&mut self,
_: &mut Context<'_>,
_: &mut impl PollParameters,
) -> Poll<NetworkBehaviourAction<Self::OutEvent, Self::ProtocolsHandler>> {
) -> Poll<NetworkBehaviourAction<Self>> {
Poll::Pending
}
}
Expand Down
2 changes: 1 addition & 1 deletion swarm/src/toggle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ where
&mut self,
cx: &mut Context<'_>,
params: &mut impl PollParameters,
) -> Poll<NetworkBehaviourAction<Self::OutEvent, Self::ProtocolsHandler>> {
) -> Poll<NetworkBehaviourAction<Self>> {
if let Some(inner) = self.inner.as_mut() {
inner
.poll(cx, params)
Expand Down