37 releases (breaking)

new 0.26.3 Jun 4, 2024
0.26.1 Dec 9, 2023
0.26.0 Nov 5, 2023
0.25.0 Jun 20, 2023
0.1.1 Jul 13, 2020

#1620 in Network programming

Download history 49363/week @ 2024-02-13 51787/week @ 2024-02-20 50462/week @ 2024-02-27 46818/week @ 2024-03-05 45001/week @ 2024-03-12 53671/week @ 2024-03-19 46892/week @ 2024-03-26 64329/week @ 2024-04-02 59057/week @ 2024-04-09 49330/week @ 2024-04-16 47272/week @ 2024-04-23 40863/week @ 2024-04-30 37367/week @ 2024-05-07 44137/week @ 2024-05-14 49800/week @ 2024-05-21 52594/week @ 2024-05-28

194,259 downloads per month
Used in 200 crates (6 directly)

MIT license

1MB
16K SLoC

Generic request/response protocols.

General Usage

The Behaviour struct is a NetworkBehaviour that implements a generic request/response protocol or protocol family, whereby each request is sent over a new substream on a connection. Behaviour is generic over the actual messages being sent, which are defined in terms of a Codec. Creating a request/response protocol thus amounts to providing an implementation of this trait which can then be given to Behaviour::with_codec. Further configuration options are available via the Config.

Requests are sent using Behaviour::send_request and the responses received as Message::Response via Event::Message.

Responses are sent using Behaviour::send_response upon receiving a Message::Request via Event::Message.

Predefined codecs

In case your message types implement serde::Serialize and serde::Deserialize, you can use two predefined behaviours:

Protocol Families

A single Behaviour instance can be used with an entire protocol family that share the same request and response types. For that purpose, Codec::Protocol is typically instantiated with a sum type.

Limited Protocol Support

It is possible to only support inbound or outbound requests for a particular protocol. This is achieved by instantiating Behaviour with protocols using ProtocolSupport::Inbound or ProtocolSupport::Outbound. Any subset of protocols of a protocol family can be configured in this way. Such protocols will not be advertised during inbound respectively outbound protocol negotiation on the substreams.

Dependencies

~8–16MB
~224K SLoC