pub struct SubgroupHeader {
pub header_type: u8,
pub track_alias: VarInt,
pub group_id: VarInt,
pub subgroup_id: VarInt,
pub publisher_priority: Option<u8>,
}Fields§
§header_type: u8§track_alias: VarInt§group_id: VarInt§subgroup_id: VarInt§publisher_priority: Option<u8>Implementations§
Source§impl SubgroupHeader
impl SubgroupHeader
Sourcepub fn decode(buf: &mut impl Buf) -> Result<Self, CodecError>
pub fn decode(buf: &mut impl Buf) -> Result<Self, CodecError>
Decode a subgroup header, Type Flags field included.
The field is read as a whole varint of whatever width the sender used,
and the value it decodes to is what the three Section 11.4.2 conditions
are applied to. A non-minimal spelling of a valid value is
accepted: 0x8010 decodes to 16, which is a legal Type Flags, and
this reads it. See the module documentation for why the draft leaves
that open and why permissive-on-receive is the choice here; the encoder
is the strict half and always writes the one-byte form.
Draft-19 refused every wide spelling before looking at the value, which
is the behaviour this replaces. Reading the whole field is also what
lets stream_type_error tell a padding or SETUP stream — both assigned,
both several bytes wide — from a Type Table 3 does not assign.
Sourcepub fn encode(&self, buf: &mut impl BufMut)
pub fn encode(&self, buf: &mut impl BufMut)
Serialize the header exactly as its Type byte describes it.
Infallible, and so willing to write a Type draft-20 Section 11.4.2
tells an endpoint to reject — including a reserved-mode Type this
module’s own Self::decode refuses to read back. Prefer
Self::encode_checked, which refuses those Types instead.
Sourcepub fn encode_checked(&self, buf: &mut impl BufMut) -> Result<(), CodecError>
pub fn encode_checked(&self, buf: &mut impl BufMut) -> Result<(), CodecError>
Serialize the header, refusing a Type value draft-20 forbids.
Errors with CodecError::InvalidField for exactly the Types draft-20
Section 11.4.2 lists as invalid (the same set Self::decode refuses),
before any byte is written, so a refused header leaves buf untouched.
Everything else is written by Self::encode.
The check belongs on the encode side as well as the decode side because
the two halves would otherwise disagree about which streams exist: a
reserved-mode header written by Self::encode cannot be read back by
Self::decode, and a codec used to rewrite captured traffic would
emit a stream it could not then parse.
pub fn has_properties(&self) -> bool
Sourcepub fn subgroup_id_mode(&self) -> u8
pub fn subgroup_id_mode(&self) -> u8
The subgroup-ID mode: (header_type & 0x06) >> 1.
0 = no subgroup ID on the wire and it is zero; 1 = the subgroup ID
is the first object’s ID; 2 = an explicit ID follows the Group ID;
3 = reserved. Exposed because the mask is module-private and
dispatch::AnySubgroupHeader::subgroup_id_mode cannot read it.
3 never comes back from Self::decode, which refuses the Types
carrying it. header_type is a public field, so a hand-built header
can still report it; Self::encode_checked is what refuses to put
one on the wire.
pub fn is_end_of_group(&self) -> bool
Sourcepub fn is_first_object(&self) -> bool
pub fn is_first_object(&self) -> bool
true when the FIRST_OBJECT bit (0x40) is set, signaling the first
object on this stream is the original publisher’s first object in the
subgroup. Added in draft-18.
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