Thomas Eizinger c93f753018
feat: replace ProtocolName with AsRef<str>
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.
2023-05-04 04:47:11 +00:00
..
2023-05-02 19:57:44 +00:00
2023-04-04 09:49:59 +00:00

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.