Skip to main content

SubgroupObject

Struct SubgroupObject 

Source
pub struct SubgroupObject {
    pub object_id: VarInt,
    pub extension_headers: Vec<u8>,
    pub payload_length: VarInt,
    pub object_status: Option<ObjectStatus>,
    pub payload: Vec<u8>,
}
Expand description

One object within a draft-16 subgroup stream with its Object ID already resolved from the delta encoding. See SubgroupObjectReader for stateful encode/decode.

Fields§

§object_id: VarInt§extension_headers: Vec<u8>

Raw extension-header bytes, excluding the byte-length prefix that precedes them on the wire. Empty when the stream header does not set the extensions-present bit, or when the block is present but zero-length. Opaque: SubgroupObjectReader::write_object re-emits the prefix and these bytes verbatim.

§payload_length: VarInt§object_status: Option<ObjectStatus>

Object status; Some when payload_length == 0.

The wire field is a varint, so it can carry any value up to 2^62-1; draft-16 Section 10.2.1.1 assigns three of them and says a peer SHOULD treat the rest as a protocol error. This field is typed to the assigned set, so it refuses to hold the codes the draft leaves unassigned — including 0x1, Object Does Not Exist, which drafts 07-15 assign and draft-16 dropped. That makes the refusal a property of the struct rather than of any one code path: an encoder cannot be handed a status the draft does not define, and does not have to check.

None on a zero-length object means the same thing as ObjectStatus::Normal and encodes as it; the wire field is not optional once payload_length is zero.

§payload: Vec<u8>

Implementations§

Source§

impl SubgroupObject

Source

pub fn status(&self) -> ObjectStatus

The status this Object resolves to.

The wire carries a status field only on a zero-length Object, so an Object holding bytes is ObjectStatus::Normal whatever Self::object_status says — draft-16 Section 10.2.1.1: “This status is implicit for any non-zero length object.”

Source

pub fn extensions_permitted(&self) -> bool

Whether this Object’s status is allowed to carry the extension headers it has.

false for exactly one shape: a non-empty extension block on an Object whose status is not ObjectStatus::Normal. See extensions_permitted_at for the rule and for why neither SubgroupObjectReader::read_object nor SubgroupObjectReader::write_object applies it — this is the codec’s way of reporting the violation to the endpoint that must act on it, rather than refusing bytes that are well formed.

Trait Implementations§

Source§

impl Clone for SubgroupObject

Source§

fn clone(&self) -> SubgroupObject

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 SubgroupObject

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Eq for SubgroupObject

Source§

impl PartialEq for SubgroupObject

Source§

fn eq(&self, other: &SubgroupObject) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for SubgroupObject

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, <T as TryFrom<U>>::Error>

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.