Previously, a protocol could be any sequence of bytes as long as it started with `/`. Now, we directly parse a protocol as `String` which enforces it to be valid UTF8. To notify users of this change, we delete the `ProtocolName` trait. The new requirement is that users need to provide a type that implements `AsRef<str>`. We also add a `StreamProtocol` newtype in `libp2p-swarm` which provides an easy way for users to ensure their protocol strings are compliant. The newtype enforces that protocol strings start with `/`. `StreamProtocol` also implements `AsRef<str>`, meaning users can directly use it in their upgrades. `multistream-select` by itself only changes marginally with this patch. The only thing we enforce in the type-system is that protocols must implement `AsRef<str>`. Resolves: #2831. Pull-Request: #3746.
Examples
A set of examples showcasing how to use rust-libp2p.
Getting started
Individual libp2p features
-
Chat A basic chat application demonstrating libp2p and the mDNS and Gossipsub protocols.
-
Distributed key-value store A basic key value store demonstrating libp2p and the mDNS and Kademlia protocol.
-
File sharing application Basic file sharing application with peers either providing or locating and getting files by name.
While obviously showcasing how to build a basic file sharing application with the Kademlia and Request-Response protocol, the actual goal of this example is to show how to integrate rust-libp2p into a larger application.
-
IPFS Kademlia Demonstrates how to perform Kademlia queries on the IPFS network.
-
IPFS Private Implementation using the gossipsub, ping and identify protocols to implement the ipfs private swarms feature.
-
Ping Small
ping
clone, sending a ping to a peer, expecting a pong as a response. See tutorial for a step-by-step guide building the example. -
Rendezvous Rendezvous Protocol. See specs.