Skip to main content

SubgroupHeader

Struct SubgroupHeader 

Source
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

Source

pub fn decode(buf: &mut impl Buf) -> Result<Self, CodecError>

Decode a subgroup header, Type field included.

A Type spelled in more than one byte is refused before it is narrowed, by wide_type_refusal: every Type the subgroup form admits is a single byte, and the wider Types Table 3 assigns are not subgroup headers.

Source

pub fn encode(&self, buf: &mut impl BufMut)

Serialize the header exactly as its type byte describes it.

The type byte is taken as the authority on framing and is written through unexamined, which is what makes this infallible. A value built by hand can therefore name a type draft-17 forbids — the reserved SUBGROUP_ID_MODE 0b11 above all — and produce a stream the receiver must answer with a PROTOCOL_VIOLATION. Prefer Self::encode_checked, which refuses such a header instead of emitting it.

Source

pub fn encode_checked(&self, buf: &mut impl BufMut) -> Result<(), CodecError>

Serialize the header, refusing a type value draft-17 does not define.

The accepted set is the one Self::decode accepts, so bytes this writes always parse back through this module rather than being refused by the peer. Section 10.4.2 lists the excluded values under “The following Type values are invalid”, and a receiver that follows it closes the session rather than reading the stream, so writing one loses the whole session and not merely the stream.

Errors with CodecError::InvalidField before any byte is written, so a refused header leaves buf untouched rather than half a header the next write would run into.

Source

pub fn has_properties(&self) -> bool

Source

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.

A decoded header never reports 3: draft-17 Section 10.4.2 lists every type value carrying that mode as invalid and Self::decode refuses them. It remains reachable on a header built by hand, which is what Self::encode_checked exists to catch.

Source

pub fn is_end_of_group(&self) -> bool

Trait Implementations§

Source§

impl Clone for SubgroupHeader

Source§

fn clone(&self) -> SubgroupHeader

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SubgroupHeader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.