Skip to main content

ProtocolName

Trait ProtocolName 

Source
pub trait ProtocolName {
    // Required method
    fn protocol_name(&self) -> &[u8] ;
}
Expand description

Types serving as protocol names.

§Context

In situations where we provide a list of protocols that we support, the elements of that list are required to implement the ProtocolName trait.

Tetsdy_Libp2p will call ProtocolName::protocol_name on each element of that list, and transmit the returned value on the network. If the remote accepts a given protocol, the element serves as the return value of the function that performed the negotiation.

§Example

use tetsy_libp2p_core::ProtocolName;

enum MyProtocolName {
    Version1,
    Version2,
    Version3,
}

impl ProtocolName for MyProtocolName {
    fn protocol_name(&self) -> &[u8] {
        match *self {
            MyProtocolName::Version1 => b"/myproto/1.0",
            MyProtocolName::Version2 => b"/myproto/2.0",
            MyProtocolName::Version3 => b"/myproto/3.0",
        }
    }
}

Required Methods§

Source

fn protocol_name(&self) -> &[u8]

The protocol name as bytes. Transmitted on the network.

Note: Valid protocol names must start with / and not exceed 140 bytes in length.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<H> ProtocolName for IndexedProtoName<H>
where H: ProtocolName,

Source§

fn protocol_name(&self) -> &[u8]

Implementors§

Source§

impl<A, B> ProtocolName for EitherName<A, B>

Source§

impl<T> ProtocolName for T
where T: AsRef<[u8]>,