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-16 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: u64Resolved absolute Object ID.
extension_headers_len: u64Byte length of the extension-header block’s contents, excluding its length prefix.
payload_length: u64Declared 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-16 assigns — read_object_meta refuses the others.
wire_len: u64Total bytes this object occupies on the wire, prefix fields included.
Implementations§
Source§impl SubgroupObjectMeta
impl SubgroupObjectMeta
Sourcepub fn payload_permission(&self) -> Option<PayloadPermission>
pub fn payload_permission(&self) -> Option<PayloadPermission>
Whether draft-16 allows this object a non-empty payload, or None when
the answer does not exist.
Draft-16 Section 10.2.1.1 gives the rule for the three codes it assigns:
Normal (0x0) permits a payload, and “any object with a status code other
than zero MUST have an empty payload”, which covers End of Group (0x3)
and End of Track (0x4). No status at all means the object carried bytes
— the status field is on the wire only when payload_length is zero —
and the same section makes Normal “implicit for any non-zero length
object”, so that case answers PayloadPermission::Permitted as well.
None is reserved for a status the draft does not assign. A meta read
off the wire cannot hold one — SubgroupObjectReader::read_object_meta
refuses those bytes — but the field is public and holds the raw code
precisely so a value carried over from another draft’s numbering can sit
in it. Draft-16 states no payload rule for a code it never assigned, and
there is no safe direction to guess in: answering Permitted would wave
through a payload the peer may have to reject, and Forbidden would
discard one the peer may accept.
Sourcepub fn extensions_permitted(&self) -> bool
pub fn extensions_permitted(&self) -> bool
Whether this Object’s status is allowed to carry the extension block it declares.
The meta form of SubgroupObject::extensions_permitted, answering
from the declared block length rather than its contents, so a relay that
forwards bytes verbatim can report the violation without copying the
block.
Trait Implementations§
Source§impl Clone for SubgroupObjectMeta
impl Clone for SubgroupObjectMeta
Source§fn clone(&self) -> SubgroupObjectMeta
fn clone(&self) -> SubgroupObjectMeta
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more