#[repr(u8)]pub enum ObjectStatus {
Normal = 0,
EndOfGroup = 3,
EndOfTrack = 4,
}Expand description
Object status values, from MoQ Transport draft-19 Section 11.2.1.1 “Object Status”, with the same three code points listed in the IANA Object Status registry the draft establishes in Section 15.9.
The draft assigns 0x0, 0x3 and 0x4. Of every other value the section says:
“Any other value SHOULD be treated as a protocol error and the session
SHOULD be closed with a PROTOCOL_VIOLATION”. ObjectStatus::from_u64
answers None for everything the draft leaves unassigned, 0x1 and 0x2
included. The section also states plainly that there is no status meaning
end of Subgroup: a subgroup ends when its stream is closed with a FIN.
Each status carries the registry’s payload rule with it, as
ObjectStatus::payload_permission.
Variants§
Normal = 0
Normal object. The one status Table 16 marks “Payload: Yes”, and the status of every Object that carries bytes — the encodings elide it and spell it out only when the payload is empty.
EndOfGroup = 3
End of Group. No object with the given Group ID and an Object ID greater than or equal to the one specified exists in that group. Table 16 marks it “Payload: No”.
EndOfTrack = 4
End of Track. No object at a location equal to or greater than the one specified exists. Table 16 marks it “Payload: No”.
Implementations§
Source§impl ObjectStatus
impl ObjectStatus
Sourcepub const ALL: &[ObjectStatus]
pub const ALL: &[ObjectStatus]
Every status draft-19 assigns, in ascending wire order.
This is exactly the set ObjectStatus::from_u64 accepts, and exactly
the three rows of the draft’s Object Status registry. Any other value is
one the draft does not assign.
Sourcepub fn from_u64(v: u64) -> Option<Self>
pub fn from_u64(v: u64) -> Option<Self>
Convert a raw u64 to an ObjectStatus, or None if draft-19 does not
assign that value.
Sourcepub fn payload_permission(self) -> PayloadPermission
pub fn payload_permission(self) -> PayloadPermission
The registry’s “Payload” column for this status, from draft-19 Section 15.9, Table 16: Normal is “Yes”, End of Group and End of Track are “No”.
This is the whole of the rule draft-19 Section 11.2.1.1 states — an Object has an empty payload unless its status is registered as permitting one — so no caller has to restate it, and none has to reach for a payload length to guess at it. The three rows currently agree with the blanket any status other than Normal means an empty payload that drafts up to 18 used; they agree by coincidence of the current assignments, not by construction, and a status registered later with “Payload: Yes” would part them.
Sourcepub fn permits_payload(self) -> bool
pub fn permits_payload(self) -> bool
true when the registry permits an Object with this status to carry a
non-empty payload. Shorthand for
self.payload_permission().permits().
Permitting is not requiring: a Normal Object with no payload is well formed, and draft-19’s encodings have a way to spell it.
Sourcepub fn as_u8(self) -> u8
pub fn as_u8(self) -> u8
Return the wire value as a single byte.
A draft-19 status datagram carries its status as one bare byte rather
than a varint, so the datagram encoder needs the code in that width;
every assigned code is well under 0xff, so this is the same number
ObjectStatus::as_u64 returns.
Trait Implementations§
Source§impl Clone for ObjectStatus
impl Clone for ObjectStatus
Source§fn clone(&self) -> ObjectStatus
fn clone(&self) -> ObjectStatus
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more