Skip to main content

SubgroupObjectMeta

Struct SubgroupObjectMeta 

Source
pub struct SubgroupObjectMeta {
    pub object_id: u64,
    pub extension_headers_len: u64,
    pub payload_length: u64,
    pub status: Option<u64>,
    pub wire_len: u64,
}
Expand description

The framing of one draft-15 subgroup object, without its payload.

Produced by SubgroupObjectReader::read_object_meta for callers that forward an object’s bytes verbatim and never inspect the payload.

Fields§

§object_id: u64

Resolved absolute Object ID.

§extension_headers_len: u64

Byte length of the extension-header block’s contents, excluding its length prefix.

§payload_length: u64

Declared payload length. Zero when status is Some.

§status: Option<u64>

Object status wire code, present only when the payload is empty.

Kept as the raw code, unlike SubgroupObject::object_status: a meta is produced by SubgroupObjectReader::read_object_meta and is never an encode input, and a relay that reads a status on one draft may hand it to a draft that numbers the same value differently. The code is still one draft-15 assigns — read_object_meta refuses the others.

§wire_len: u64

Total bytes this object occupies on the wire, prefix fields included.

Implementations§

Source§

impl SubgroupObjectMeta

Source

pub fn payload_permission(&self) -> Option<PayloadPermission>

Whether this object is permitted a non-empty payload, or None when Self::status holds a code draft-15 does not assign.

Self::status is a raw wire code, so the rule of draft-15 Section 10.2.1.1 — “Any object with a status code other than zero MUST have an empty payload” — cannot be read off it without first deciding what the code means. This does that decision once: a consumer asking whether an object may carry bytes gets an answer instead of a number and a rule to apply to it.

An absent status answers PayloadPermission::Permitted rather than None. A meta has no status only when its payload length is non-zero, and Section 10.2.1.1 says of Normal that “This status is implicit for any non-zero length object” — the object has a status, the encoding just does not spell it.

None means the code is one the draft leaves unassigned, and so one it gives no payload rule for. That is not reachable through SubgroupObjectReader::read_object_meta, which refuses such a code before it can reach the field, but the fields here are public and a meta assembled by hand — by a relay carrying a status across from a draft that numbers them differently, say — can hold anything a varint can. The answer there is that draft-15 has none, not that the payload is forbidden.

Source

pub fn extensions_permitted(&self) -> Option<bool>

Whether this object’s status is allowed to carry the extension block it declares.

The same rule SubgroupObject::extensions_permitted answers, from the declared length rather than from the bytes. A relay that forwards an object verbatim reads it through SubgroupObjectReader::read_object_meta and never copies the block, so asking this must not require having it — draft-15 Section 10.2.1.2 turns on whether the block is empty, and the length says that on its own.

A status this draft does not assign answers None rather than false, for the reason Self::payload_permission gives: the draft states no rule for a code it does not define, and a meta assembled by hand can hold one. read_object_meta refuses such a code before it reaches the field.

An absent status answers from Normal. A meta has no status only when its payload length is non-zero, and such an object is Normal by Section 10.2.1.1, so its extensions are permitted.

Trait Implementations§

Source§

impl Clone for SubgroupObjectMeta

Source§

fn clone(&self) -> SubgroupObjectMeta

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 Copy for SubgroupObjectMeta

Source§

impl Debug for SubgroupObjectMeta

Source§

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

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

impl Eq for SubgroupObjectMeta

Source§

impl PartialEq for SubgroupObjectMeta

Source§

fn eq(&self, other: &SubgroupObjectMeta) -> 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 SubgroupObjectMeta

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.