Expand description
Draft-22 control message encoding and decoding.
The one difference from draft-21 is LOCATION_FILTER (0x21). Its value
opens with a Location Filter Type that names which vi64 fields follow,
and nothing on the wire states its length: the parameter is
self-delimiting, like a Location, and a receiver that does not understand
the type cannot find the end of it (Section 9.20.9, Table 6). See
decode_location_filter.
Everything else is draft-21’s wire, and so draft-20’s:
- FETCH (0x16) has no
Fetch Type. Track Namespace and Track Name are inline fields of FETCH, and the range travels in theLOCATION_FILTERparameter (Section 9.11, Figure 16). - PUBLISH_STATE_NOTIFY (0x22) carries no Request ID (Section 9.10, Figure 15).
FILL_PARAMETERS(0x23) is a length-prefixed parameter carrying a nested parameter block in its own scope (Section 9.20.15).INCLUDE_PROPERTIES(0x35) is a uint8 restricted to 0 and 1 (Section 9.20.21).EXPIRESis the only parameter whose definition namesPUBLISH_OK.PUBLISH_DONEstatus 0x3 andREQUEST_ERRORcode 0x32 are unassigned.
Every section, table and figure reference in this module is draft-22’s own.
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§
- location_
filter_ types - The
Location Filter Typevalues draft-22 Section 9.20.9 assigns, named as Table 6 names them. - publish_
done_ codes - Numeric values for the
PublishDonefields. - request_
error_ codes - REQUEST_ERROR error codes with dedicated meaning.
Structs§
- Fetch
- FETCH (0x16), rebuilt in draft-20 (Section 9.11, Figure 16).
- FetchOk
- FETCH_OK (0x18).
end_of_trackis uint8. - GoAway
- GOAWAY (0x10). Draft-22’s GOAWAY has no Request ID field, so the control-stream and request-stream forms are identical on the wire. Draft-18 is the one draft that carries the field, and only when the message is sent on the control stream.
- Namespace
- Namespace
Done - Publish
- Publish
Done - PUBLISH_DONE (0x0B). The wire layout is unchanged from draft-19; what
draft-20 changed is the
Stream Countsentinel, what the count includes, and the removal of status code 0x3. - Publish
Namespace - Publish
Skipped - PUBLISH_SKIPPED (0x0F). Drafts 17 and 18 name this codepoint PUBLISH_BLOCKED; the wire layout — track namespace suffix then track name — is the same on all four drafts that carry the message.
- Publish
State Notify - PUBLISH_STATE_NOTIFY (0x22), new in draft-20 (Section 9.10, Figure 15).
- 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. Only drafts 16 and 17 carry asubscribe_optionsvarint here; on draft-22 a namespace subscription only produces 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 (Section 9.20.18), which on drafts 15 through 17 may appear on SUBSCRIBE_NAMESPACE instead. - Track
Status
Enums§
- Control
Message - Message
Type - Param
Encoding 🔒 - How a parameter value is encoded on the wire.
Constants§
- AUTHORIZATION_
TOKEN 🔒 - AUTHORIZATION TOKEN, Parameter Type 0x03.
- FILL_
PARAMETERS - The FILL_PARAMETERS parameter type, draft-22 Section 9.20.15.
- FILL_
PARAMETERS_ 🔒ALLOWED - The parameter types draft-22 Section 9.20.15, Table 7 permits inside a
FILL_PARAMETERSvalue, in ascending order. - IMMUTABLE_
PROPERTIES 🔒 - Immutable Properties, Property Type 0xB.
- KNOWN_
SETUP_ 🔒OPTIONS - The Setup Option types this draft defines.
- LOCATION_
FILTER - The LOCATION_FILTER parameter type, draft-22 Section 9.20.9.
- 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_
location_ 🔒filter_ fields - Hold a decoded
LOCATION_FILTERto the one arithmetic rule draft-22 states about it. - check_
location_ 🔒filters - Hold every LOCATION_FILTER and FILL_PARAMETERS parameter to the structure its own type names.
- check_
parameter_ 🔒scope - Refuse a message carrying a Message Parameter its own definition does not place there.
- 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_
fill_ parameters - Decode the nested parameter block a
FILL_PARAMETERSvalue carries. - decode_
kvp_ 🔒delta - Decode delta-encoded KVPs with even/odd convention (for setup options and track properties). Read until buffer is exhausted.
- decode_
location_ filter - Decode a draft-22
LOCATION_FILTERvalue into itsLocation Filter Typeand the fields that type names. - decode_
parameter_ 🔒value - Read one parameter’s value in the shape its type names.
- 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. - location_
filter_ field_ count - How many
vi64fields follow aLocation Filter Type, orNonefor a type draft-22 does not assign. - param_
encoding 🔒 - parameter_
in_ scope - Whether draft-22 lets Message Parameter
keyappear inmessage. - parameter_
may_ 🔒repeat - Whether draft-22 lets a message carry parameter type
keymore than once. - read_
location_ 🔒filter - Read one
LOCATION_FILTERvalue offbuf: theLocation Filter Type, then exactly the fields that type names. - track_
property_ 🔒value_ in_ range - Whether
valueis inside the range draft-22 allows for a Track Property type that restricts one. - uint8_
value_ 🔒in_ range - Whether
valueis inside the range draft-22 allows for a uint8-valued parameter. - write_
location_ 🔒filter - Write a
LOCATION_FILTERvalue in its minimal encoding: the type, then the fields, each the shortestvi64that holds it.