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:
- [
cbor::Behaviour] for CBOR-encoded messages - [
json::Behaviour] for JSON-encoded messages
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.