pub struct KeyValuePair {
pub key: VarInt,
pub value: KvpValue,
}Expand description
A MoQT Key-Value Pair (used for parameters in control messages).
Fields§
§key: VarIntParameter key (even = varint value, odd = byte string value).
value: KvpValueParameter value.
Implementations§
Source§impl KeyValuePair
impl KeyValuePair
Sourcepub fn encode_list(pairs: &[KeyValuePair], buf: &mut impl BufMut)
pub fn encode_list(pairs: &[KeyValuePair], buf: &mut impl BufMut)
Encode a list of key-value pairs (count-prefixed).
Sourcepub fn encode_list_checked(
pairs: &[KeyValuePair],
buf: &mut impl BufMut,
) -> Result<(), KvpError>
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.
Sourcepub fn decode_list(buf: &mut impl Buf) -> Result<Vec<KeyValuePair>, KvpError>
pub fn decode_list(buf: &mut impl Buf) -> Result<Vec<KeyValuePair>, KvpError>
Decode a list of key-value pairs (count-prefixed).
Sourcepub fn decode_d07(buf: &mut impl Buf) -> Result<Self, KvpError>
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.
Sourcepub fn encode_d07(&self, buf: &mut impl BufMut)
pub fn encode_d07(&self, buf: &mut impl BufMut)
Encode a single KVP using draft-07 format (all values are length-prefixed).
Sourcepub fn decode_list_d07(
buf: &mut impl Buf,
) -> Result<Vec<KeyValuePair>, KvpError>
pub fn decode_list_d07( buf: &mut impl Buf, ) -> Result<Vec<KeyValuePair>, KvpError>
Decode a list of KVPs using draft-07 format.
Sourcepub fn encode_list_d07(pairs: &[KeyValuePair], buf: &mut impl BufMut)
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
impl Clone for KeyValuePair
Source§fn clone(&self) -> KeyValuePair
fn clone(&self) -> KeyValuePair
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more