switchback_protocols/lib.rs
1//! Built-in protocol implementations and registry for switchback attachments.
2//!
3//! Transport semantics are orthogonal to [contract family](https://github.com/canardleteer/switchback-rs/blob/main/docs/GLOSSARY.md#contract-family).
4//! Parsers attach [`ProtocolAttachment`](switchback_traits::ProtocolAttachment)
5//! envelopes on contract and entity nodes; this crate provides `HttpProtocol`,
6//! `GrpcProtocol`, and [`ProtocolRegistry`] to encode and decode built-in payload
7//! schemas.
8//!
9//! # Entity attachment matrix
10//!
11//! | IR node | `http` payload arm | `grpc` payload arm |
12//! | --- | --- | --- |
13//! | Contract | `HttpContractMeta` | `GrpcContractMeta` |
14//! | Operation | `HttpOperationMeta` | `GrpcOperationMeta` |
15//! | Response ref/body | `HttpResponseMeta` / `HttpErrorMeta` | `GrpcStatusMeta` / `GrpcErrorMeta` |
16//! | Parameter ref/body | `HttpParameterMeta` | `GrpcMetadataMeta` |
17//!
18//! Decode: read `protocol_id`, deserialize `payload` as `HttpPayload` or
19//! `GrpcPayload`, inspect the oneof kind. See
20//! [ADR 0011](https://github.com/canardleteer/switchback-rs/blob/main/docs/adr/0011-protocol-layer-and-contract-family-binding.md)
21//! and [ADR 0012](https://github.com/canardleteer/switchback-rs/blob/main/docs/adr/0012-http-streaming-inference-and-grpc-metadata-from-protobuf-options.md).
22
23#![forbid(unsafe_code)]
24#![warn(missing_docs)]
25
26mod amqp;
27mod grpc;
28mod http;
29mod kafka;
30mod mqtt;
31mod registry;
32mod severity;
33mod traits;
34mod wire;
35
36pub use amqp::AmqpProtocol;
37pub use grpc::GrpcProtocol;
38pub use http::HttpProtocol;
39pub use kafka::KafkaProtocol;
40pub use mqtt::MqttProtocol;
41pub use registry::{
42 AmqpPayloadKind, DecodedAttachment, GrpcPayloadKind, HttpPayloadKind, KafkaPayloadKind,
43 MqttPayloadKind, ProtocolRegistry,
44};
45pub use severity::{
46 grpc_status_name_severity, grpc_status_severity, http_status_code_severity,
47 http_status_severity,
48};
49pub use traits::{
50 ErrorProtocol, FieldCarrierProtocol, OperationProtocol, Protocol, ProtocolWire,
51 ResponseProtocol,
52};