pub struct SubgroupHeader {
pub stream_type: StreamType,
pub track_alias: VarInt,
pub group_id: VarInt,
pub subgroup_id: VarInt,
pub publisher_priority: u8,
}Expand description
Subgroup stream header (unified across all 6 stream type variants).
Decoded representation includes stream_type to preserve the variant.
Fields§
§stream_type: StreamTypeThe stream type variant used for encoding.
track_alias: VarIntTrack alias identifying the subscription.
group_id: VarIntGroup identifier.
subgroup_id: VarIntSubgroup identifier within the group.
publisher_priority: u8Publisher priority for delivery ordering.
Implementations§
Source§impl SubgroupHeader
impl SubgroupHeader
Sourcepub fn encode_stream(&self, buf: &mut impl BufMut)
pub fn encode_stream(&self, buf: &mut impl BufMut)
Encode a subgroup stream header including its leading stream-type field, so the bytes form the start of a data stream a peer can read.
Self::encode writes the body alone, which is what a caller wants
once the stream is already open and what a caller must not use for its
first write. It is also the half that cannot stand on its own here,
because the stream type is what says whether a Subgroup ID follows it
and whether the objects on the stream carry extension headers.
Sourcepub fn encode(&self, buf: &mut impl BufMut)
pub fn encode(&self, buf: &mut impl BufMut)
Encode the subgroup header (always as explicit subgroup_id format). Encode the header body, without its leading stream-type field.
Driven by the stream type, and silent about a subgroup_id it decides
not to write: on a type whose Subgroup ID Field Present column reads No
the field is dropped, and the peer reads the subgroup the type names -
zero, or the first Object’s ID - rather than the one in hand. Nothing is
malformed about the result, which is what makes it worth refusing rather
than tolerating. Self::encode_checked refuses it.
Sourcepub fn encode_checked(&self, buf: &mut impl BufMut) -> Result<(), CodecError>
pub fn encode_checked(&self, buf: &mut impl BufMut) -> Result<(), CodecError>
Encode the header body, refusing a Subgroup ID this stream type has nowhere to put.
Self::decode_with_type leaves the field at zero for every type that
does not carry it, so a decoded header always passes: the refusal is for
a header assembled by hand, where a caller set an ID the type will
discard.
A zero is accepted under any type. It is what the decoder produces, and
on a Subgroup ID Value column reading 0 it is also the truth, so
refusing it would refuse the ordinary case to catch nothing.
§Errors
CodecError::InvalidField if a non-zero Subgroup ID sits under a
stream type that writes no Subgroup ID field.
Sourcepub fn decode(buf: &mut impl Buf) -> Result<Self, CodecError>
pub fn decode(buf: &mut impl Buf) -> Result<Self, CodecError>
Decode a subgroup header (assumes explicit subgroup_id format).
For stream-type-aware decoding, use Self::decode_with_type.
Sourcepub fn decode_with_type(
stream_type: StreamType,
buf: &mut impl Buf,
) -> Result<Self, CodecError>
pub fn decode_with_type( stream_type: StreamType, buf: &mut impl Buf, ) -> Result<Self, CodecError>
Decode a subgroup header with the specific stream type variant.
Sourcepub fn decode_stream(buf: &mut impl Buf) -> Result<Self, CodecError>
pub fn decode_stream(buf: &mut impl Buf) -> Result<Self, CodecError>
Decode a subgroup header from the start of a data stream, consuming the leading stream type varint and using it to select the variant.
Errors with CodecError::UnknownStreamType when the stream table does
not assign the leading type, which this draft answers with a close, and
with CodecError::InvalidField when it does assign it but not to a
subgroup. stream_type_error draws that line.
Trait Implementations§
Source§impl Clone for SubgroupHeader
impl Clone for SubgroupHeader
Source§fn clone(&self) -> SubgroupHeader
fn clone(&self) -> SubgroupHeader
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more