Expand description
Draft-19 control message encoding and decoding.
Key differences from draft-18:
Request IDfield removed from GOAWAY entirely; the control-stream and request-stream forms are now identical.- New Range Filter parameters (length-prefixed): SUBGROUP_FILTER (0x25), OBJECTID_FILTER (0x26), PRIORITY_FILTER (0x27), OBJECT_PROPERTY_FILTER (0x28) and TRACK_PROPERTY_FILTER (0x29).
- New Setup Options MAX_FILTER_RANGES (0x06) and MAX_REQUEST_UPDATES (0x08); both are even KVP types carrying a varint value.
- GROUP_ORDER (0x22) moves from PUBLISH_OK to SUBSCRIBE_TRACKS (the wire encoding of the parameter is unchanged).
- PUBLISH_BLOCKED renamed to PUBLISH_SKIPPED (still type 0x0F; wire identical).
- SUBSCRIPTION_FILTER renamed to LOCATION_FILTER (still parameter 0x21).
- REQUEST_ERROR adds CONFLICTING_FILTERS (0x35) and INVALID_FILTER (0x36); DUPLICATE_SUBSCRIPTION (0x19) is removed.
- The framing field after Message Length is named Message Body (draft-19 Section 10, Figure 3); earlier drafts called it Message Payload. The change is editorial, so the bytes are unchanged, but this module uses the new name.
Re-exportsΒ§
pub use crate::error::CodecError;pub use crate::error::MAX_GOAWAY_URI_LENGTH;pub use crate::error::MAX_MESSAGE_LENGTH;pub use crate::error::MAX_NAMESPACE_TUPLE_SIZE;pub use crate::error::MAX_REASON_PHRASE_LENGTH;
ModulesΒ§
- publish_
done_ codes - Numeric values for the
PublishDone::status_codefield. - request_
error_ codes - REQUEST_ERROR error codes with dedicated meaning.
StructsΒ§
- Fetch
- FetchOk
- FETCH_OK (0x18).
end_of_trackis uint8. - GoAway
- GOAWAY (0x10). In draft-19 the Request ID field is removed, so the control-stream and request-stream forms are identical on the wire.
- Namespace
- Namespace
Done - Publish
- Publish
Done - PUBLISH_DONE (0x0B). Status codes 0x5/0x6 are swapped vs draft-17.
- Publish
Namespace - Publish
Skipped - PUBLISH_SKIPPED (0x0F, renamed from PUBLISH_BLOCKED in draft-19; wire layout is unchanged).
- Redirect
- Optional Redirect structure carried in REQUEST_ERROR with code 0x34.
- Request
Error - REQUEST_ERROR (0x05). Adds an optional Redirect structure when
error_codeis REDIRECT (0x34). - Request
Ok - REQUEST_OK (0x07). Used as a generic OK response and as the alias for PUBLISH_OK / REQUEST_UPDATE_OK / TRACK_STATUS_OK / SUBSCRIBE_NAMESPACE_OK / PUBLISH_NAMESPACE_OK.
- Request
Update - Setup
- Unified SETUP (0x2F00).
- Subscribe
- Subscribe
Namespace - SUBSCRIBE_NAMESPACE (0x50). Subscribes to NAMESPACE / NAMESPACE_DONE
advertisements for namespaces matching
namespace_prefix. Thesubscribe_optionsbyte from draft-17 is removed; namespace subscriptions only produce NAMESPACE / NAMESPACE_DONE. - Subscribe
Ok - SUBSCRIBE_OK (0x04).
- Subscribe
Tracks - SUBSCRIBE_TRACKS (0x51, new in draft-18). Subscribes to PUBLISH messages
for tracks whose namespace matches
namespace_prefix. Carries the FORWARD parameter (which previously lived on SUBSCRIBE_NAMESPACE). - Track
Status
EnumsΒ§
- Control
Message - Fetch
Payload - Fetch
Type - Message
Type - Param
Encoding π - How a parameter value is encoded on the wire.
ConstantsΒ§
- AUTHORIZATION_
TOKEN π - IMMUTABLE_
PROPERTIES π - Immutable Properties, Property Type 0xB.
- KNOWN_
SETUP_ πOPTIONS - The Setup Option types this draft defines.
- REPEATABLE_
SETUP_ πOPTION - The one Setup Option whose definition allows more than one instance.
FunctionsΒ§
- add_
delta π - Add a delta to the previous delta-encoded key.
- check_
authorization_ πtokens - Hold every AUTHORIZATION TOKEN parameter to the Token structure it names.
- check_
discriminators π - Refuse a message whose discriminator disagrees with the fields beside it.
- check_
full_ πtrack_ name - Hold a namespace-plus-name pair to the Full Track Name cap.
- check_
parameter_ πscope - Refuse a message carrying a Message Parameter its own definition does not place there.
- check_
ranges π - Refuse a FETCH whose range ends before it starts.
- check_
subscription_ πfilters - Hold every LOCATION_FILTER parameter to the filter structure it names.
- check_
track_ πproperty_ values - Refuse a Track Property whose value falls outside the range its type allows, wherever in the list it is carried.
- decode_
kvp_ πdelta - Decode delta-encoded KVPs with even/odd convention (for setup options and track properties). Read until buffer is exhausted.
- decode_
parameters π - Decode a count-prefixed list of parameters with delta-encoded types.
- decode_
setup_ πoptions - Decode the Setup Options of a SETUP message.
- decode_
track_ πproperties - Decode the Track Properties that fill the tail of a control message.
- encode_
kvp_ πdelta - Encode delta-encoded KVPs with even/odd convention.
- encode_
parameters π - Encode a count-prefixed list of parameters with delta-encoded types.
- encode_
setup_ πoptions - Encode the Setup Options of a SETUP message.
- encode_
track_ πproperties - Encode a control messageβs Track Properties.
- is_
location_ πvalue - Whether
bytesis exactly the wire form of a Location β two consecutive varints and nothing after them. - is_
track_ πnamespace_ value - Whether
bytesis exactly the wire form of a Track Namespace, with nothing after it. The same reasoning asis_location_value: the value goes out verbatim, so it has to be something this draft can read back. - param_
encoding π - parameter_
in_ πscope - Whether draft-19 lets Message Parameter
keyappear inmessage. - parameter_
may_ πrepeat - Whether a message may carry
keymore than once. - track_
property_ πvalue_ in_ range - Whether
valueis inside the range draft-19 allows for a Track Property type that restricts one. - uint8_
value_ πin_ range - Whether
valueis inside the range draft-19 allows for a uint8-valued parameter.