pub struct SubgroupHeader {
pub stream_type: StreamType,
pub track_alias: VarInt,
pub group_id: VarInt,
pub subgroup_id: VarInt,
pub publisher_priority: u8,
}Fields§
§stream_type: StreamType§track_alias: VarInt§group_id: VarInt§subgroup_id: VarInt§publisher_priority: u8Implementations§
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 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.
pub fn decode(buf: &mut impl Buf) -> Result<Self, CodecError>
pub fn decode_with_type( stream_type: StreamType, buf: &mut impl Buf, ) -> Result<Self, CodecError>
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