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 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.3.1 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.

The whole field is read, which is what lets stream_type_error tell a padding or SETUP stream — both assigned, both several bytes wide — from a Type Table 2 does not assign.

Source

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-23 Section 11.3.1 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.

Source

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

Serialize the header, refusing a Type value draft-23 forbids.

Errors with CodecError::InvalidField for exactly the Types draft-23 Section 11.3.1 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.

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.

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.

Source

pub fn is_end_of_group(&self) -> bool

Source

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.

Trait Implementations§

Source§

impl Clone for SubgroupHeader

Source§

fn clone(&self) -> Self

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.