2121//!
2222//! Reference: ref/w3c_ref/messages_appendix.cddl
2323
24- use bytes:: Buf ;
2524use heapless:: Vec ;
2625use minicbor:: { Decoder , Encoder } ;
27- use openscreen_common:: quinn_varint:: { Codec , VarInt } ;
28- use openscreen_common:: { MessageError , MAX_STRING_LENGTH , MAX_URLS } ;
26+ use openscreen_common:: {
27+ decode_type_key, encode_type_key, MessageError , MAX_STRING_LENGTH , MAX_URLS ,
28+ } ;
2929
3030/// A wrapper around heapless::Vec that implements minicbor's Write trait
3131struct VecWriter < ' a , const N : usize > {
@@ -48,38 +48,6 @@ impl<'a, const N: usize> minicbor::encode::Write for VecWriter<'a, N> {
4848 }
4949}
5050
51- /// Encode a type key as RFC 9000 variable-length integer into a heapless::Vec
52- fn encode_type_key < const N : usize > (
53- type_key : u16 ,
54- buf : & mut Vec < u8 , N > ,
55- ) -> Result < ( ) , MessageError > {
56- let varint = VarInt :: from ( type_key) ;
57- let size = varint. size ( ) ;
58-
59- // Ensure we have space
60- if buf. len ( ) + size > N {
61- return Err ( MessageError :: BufferFull ) ;
62- }
63-
64- // Encode varint to a small stack buffer, then copy
65- let mut temp = [ 0u8 ; 8 ] ;
66- let mut slice = & mut temp[ ..] ;
67- varint. encode ( & mut slice) ;
68- buf. extend_from_slice ( & temp[ ..size] )
69- . map_err ( |_| MessageError :: BufferFull )
70- }
71-
72- /// Decode a type key as RFC 9000 variable-length integer from a byte slice.
73- /// Returns the type key and the number of bytes consumed.
74- fn decode_type_key ( data : & [ u8 ] ) -> Result < ( u16 , usize ) , MessageError > {
75- let mut cursor = data;
76- let varint = VarInt :: decode ( & mut cursor) . map_err ( |_| MessageError :: DecodeFailed ) ?;
77- let consumed = data. len ( ) - cursor. remaining ( ) ;
78- let value = varint. into_inner ( ) ;
79- let type_key = u16:: try_from ( value) . map_err ( |_| MessageError :: InvalidMessageType ) ?;
80- Ok ( ( type_key, consumed) )
81- }
82-
8351/// Maximum size for a single CBOR message
8452pub const MAX_MESSAGE_SIZE : usize = 1024 ;
8553
0 commit comments