Skip to main content

KeyValuePair

Struct KeyValuePair 

Source
pub struct KeyValuePair {
    pub key: VarInt,
    pub value: KvpValue,
}
Expand description

A MoQT Key-Value Pair (used for parameters in control messages).

Fields§

§key: VarInt

Parameter key (even = varint value, odd = byte string value).

§value: KvpValue

Parameter value.

Implementations§

Source§

impl KeyValuePair

Source

pub fn encode(&self, buf: &mut impl BufMut)

Encode a single key-value pair.

Source

pub fn decode(buf: &mut impl Buf) -> Result<Self, KvpError>

Decode a single key-value pair.

Source

pub fn encode_list(pairs: &[KeyValuePair], buf: &mut impl BufMut)

Encode a list of key-value pairs (count-prefixed).

Source

pub fn encode_list_checked( pairs: &[KeyValuePair], buf: &mut impl BufMut, ) -> Result<(), KvpError>

Encode a count-prefixed list, refusing a value no peer may accept.

Self::encode_list writes whatever it is given. The length maximum in MAX_KVP_VALUE_LEN is written as a receiver’s rule, and it is applied on decode for that reason — but a value past it is one the receiver is required to close the session over, so writing it is not a way to send it. This is the entry point that says so before any byte is written, and it is what the parameter encoders of drafts 11 through 15 write through.

Every pair is checked before the first is written, so a refused list leaves buf untouched rather than half a list followed by an error.

The refusal is never the only one. Those drafts also limit a control message to 2^16-1 bytes, and the two maxima are the same number, so a value one byte past this one is already inside a payload one byte past that one. What this adds is which of the two rules the error names, at the layer that owns it, rather than whether the message is written.

Drafts 07 through 10 have no Key-Value-Pair and state no maximum; their Self::encode_list_d07 is unaffected and stays infallible.

Source

pub fn decode_list(buf: &mut impl Buf) -> Result<Vec<KeyValuePair>, KvpError>

Decode a list of key-value pairs (count-prefixed).

Source

pub fn decode_d07(buf: &mut impl Buf) -> Result<Self, KvpError>

Decode a single Parameter using the drafts 07 through 10 format, where every value is length-prefixed.

No cap is applied to the length. Those four drafts describe a Parameter as { Parameter Type (i), Parameter Length (i), Parameter Value (..) } and say nothing about how long a value may be; the 2^16-1 maximum in MAX_KVP_VALUE_LEN arrives with the Key-Value-Pair of draft-11, and applying it here refuses parameters these drafts permit.

The read is still bounded: the reader refuses a length longer than the bytes actually present, so a declared length cannot make this allocate more than the peer really sent.

Source

pub fn encode_d07(&self, buf: &mut impl BufMut)

Encode a single KVP using draft-07 format (all values are length-prefixed).

Source

pub fn decode_list_d07( buf: &mut impl Buf, ) -> Result<Vec<KeyValuePair>, KvpError>

Decode a list of KVPs using draft-07 format.

Source

pub fn encode_list_d07(pairs: &[KeyValuePair], buf: &mut impl BufMut)

Encode a list of KVPs using draft-07 format.

Trait Implementations§

Source§

impl Clone for KeyValuePair

Source§

fn clone(&self) -> KeyValuePair

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 KeyValuePair

Source§

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

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

impl Eq for KeyValuePair

Source§

impl PartialEq for KeyValuePair

Source§

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

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.