use libp2p::swarm::behaviour::toggle::Toggle;
use libp2p::swarm::NetworkBehaviour;
use libp2p::{autonat, dcutr, gossipsub, identify, mdns, ping, relay};
#[derive(NetworkBehaviour)]
#[behaviour(to_swarm = "HuddleBehaviorEvent")]
pub struct HuddleBehavior {
pub mdns: Toggle<mdns::tokio::Behaviour>,
pub identify: identify::Behaviour,
pub ping: ping::Behaviour,
pub gossipsub: gossipsub::Behaviour,
pub relay_client: relay::client::Behaviour,
pub autonat_client: autonat::v2::client::Behaviour,
pub autonat_server: autonat::v2::server::Behaviour,
pub dcutr: dcutr::Behaviour,
}
#[derive(Debug)]
pub enum HuddleBehaviorEvent {
Mdns(mdns::Event),
Identify(identify::Event),
Ping(ping::Event),
Gossipsub(gossipsub::Event),
RelayClient(relay::client::Event),
AutonatClient(autonat::v2::client::Event),
AutonatServer(autonat::v2::server::Event),
Dcutr(dcutr::Event),
}
impl From<mdns::Event> for HuddleBehaviorEvent {
fn from(event: mdns::Event) -> Self {
Self::Mdns(event)
}
}
impl From<identify::Event> for HuddleBehaviorEvent {
fn from(event: identify::Event) -> Self {
Self::Identify(event)
}
}
impl From<ping::Event> for HuddleBehaviorEvent {
fn from(event: ping::Event) -> Self {
Self::Ping(event)
}
}
impl From<gossipsub::Event> for HuddleBehaviorEvent {
fn from(event: gossipsub::Event) -> Self {
Self::Gossipsub(event)
}
}
impl From<relay::client::Event> for HuddleBehaviorEvent {
fn from(event: relay::client::Event) -> Self {
Self::RelayClient(event)
}
}
impl From<autonat::v2::client::Event> for HuddleBehaviorEvent {
fn from(event: autonat::v2::client::Event) -> Self {
Self::AutonatClient(event)
}
}
impl From<autonat::v2::server::Event> for HuddleBehaviorEvent {
fn from(event: autonat::v2::server::Event) -> Self {
Self::AutonatServer(event)
}
}
impl From<dcutr::Event> for HuddleBehaviorEvent {
fn from(event: dcutr::Event) -> Self {
Self::Dcutr(event)
}
}