Skip to main content

PayloadPermission

Enum PayloadPermission 

Source
pub enum PayloadPermission {
    Permitted,
    Forbidden,
}
Expand description

Whether an object carrying a given status may hold a non-empty payload.

Draft-15 Section 10.2.1.1 states the rule in one sentence — “Any object with a status code other than zero MUST have an empty payload” — and Section 10.2.1 says the same from the other side, listing the Object Payload as “Only present when ‘Object Status’ is Normal (0x0)”. On this draft the answer therefore falls out of the code being zero or not, and every status but ObjectStatus::Normal forbids a payload.

It is worth a type all the same, because that arithmetic is not something a consumer can safely perform on a raw wire code. A code draft-15 does not assign is not non-zero, and therefore forbidden: it is a code with no meaning at all, and the draft’s answer to it is to terminate the session, not to infer a payload rule. Handing back a PayloadPermission keeps the two apart, and lets a caller ask the question without restating the rule — or, worse, restating it slightly differently.

Variants§

§

Permitted

The status permits a payload but does not require one: a zero-length object with such a status is well formed, and draft-15’s encodings have a way to spell it.

§

Forbidden

An object with such a status has an empty payload, and one carrying bytes is malformed.

Implementations§

Source§

impl PayloadPermission

Source

pub fn for_status(status: ObjectStatus) -> Self

The permission draft-15 gives objects carrying status.

Written as a match over every assigned status rather than as a test for zero, so that a status added to ObjectStatus later cannot quietly inherit not Normal, therefore forbidden — it stops the crate compiling until its own answer is written down. Drafts after 15 moved this rule into a column of the Object Status registry, where a future status may well permit a payload; the shape here does not have to change when a caller crosses that boundary.

Source

pub fn permits(self) -> bool

true for PayloadPermission::Permitted.

The permission answers on its own, with no payload length in hand, which is the point of asking the status rather than the framing.

Trait Implementations§

Source§

impl Clone for PayloadPermission

Source§

fn clone(&self) -> PayloadPermission

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 PayloadPermission

Source§

impl Debug for PayloadPermission

Source§

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

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

impl Eq for PayloadPermission

Source§

impl PartialEq for PayloadPermission

Source§

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

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.