@@ -74,79 +74,23 @@ pub fn decode_tag(d: &mut Decoder, from: &str) -> Result<Tag, decode::Error> {
7474 . map_err ( |e| decode:: Error :: message ( format ! ( "Failed to decode tag in {from}: {e}" ) ) )
7575}
7676
77- /// Decode any in CDDL, only support basic datatype
77+ /// Decode any in CDDL (any CBOR type) and return its bytes.
7878///
7979/// # Errors
8080///
8181/// Error if the decoding fails.
8282pub fn decode_any ( d : & mut Decoder , from : & str ) -> Result < Vec < u8 > , decode:: Error > {
83- match d. datatype ( ) ? {
84- minicbor:: data:: Type :: String => {
85- match decode_helper :: < String , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
86- Ok ( i) => Ok ( i. as_bytes ( ) . to_vec ( ) ) ,
87- Err ( e) => Err ( e) ,
88- }
89- } ,
90- minicbor:: data:: Type :: U8 => {
91- match decode_helper :: < u8 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
92- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
93- Err ( e) => Err ( e) ,
94- }
95- } ,
96- minicbor:: data:: Type :: U16 => {
97- match decode_helper :: < u16 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
98- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
99- Err ( e) => Err ( e) ,
100- }
101- } ,
102- minicbor:: data:: Type :: U32 => {
103- match decode_helper :: < u32 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
104- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
105- Err ( e) => Err ( e) ,
106- }
107- } ,
108- minicbor:: data:: Type :: U64 => {
109- match decode_helper :: < u64 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
110- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
111- Err ( e) => Err ( e) ,
112- }
113- } ,
114- minicbor:: data:: Type :: I8 => {
115- match decode_helper :: < i8 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
116- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
117- Err ( e) => Err ( e) ,
118- }
119- } ,
120- minicbor:: data:: Type :: I16 => {
121- match decode_helper :: < i16 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
122- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
123- Err ( e) => Err ( e) ,
124- }
125- } ,
126- minicbor:: data:: Type :: I32 => {
127- match decode_helper :: < i32 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
128- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
129- Err ( e) => Err ( e) ,
130- }
131- } ,
132- minicbor:: data:: Type :: I64 => {
133- match decode_helper :: < i64 , _ > ( d, & format ! ( "{from} Any" ) , & mut ( ) ) {
134- Ok ( i) => Ok ( i. to_be_bytes ( ) . to_vec ( ) ) ,
135- Err ( e) => Err ( e) ,
136- }
137- } ,
138- minicbor:: data:: Type :: Bytes => Ok ( decode_bytes ( d, & format ! ( "{from} Any" ) ) ?) ,
139- minicbor:: data:: Type :: Array => {
140- Ok ( decode_array_len ( d, & format ! ( "{from} Any" ) ) ?
141- . to_be_bytes ( )
142- . to_vec ( ) )
143- } ,
144- _ => {
145- Err ( decode:: Error :: message ( format ! (
146- "{from} Any, Data type not supported"
147- ) ) )
148- } ,
149- }
83+ let start = d. position ( ) ;
84+ d. skip ( ) ?;
85+ let end = d. position ( ) ;
86+ let bytes = d
87+ . input ( )
88+ . get ( start..end)
89+ . ok_or ( decode:: Error :: message ( format ! (
90+ "Failed to get any CBOR bytes in {from}. Ivalid CBOR bytes."
91+ ) ) ) ?
92+ . to_vec ( ) ;
93+ Ok ( bytes)
15094}
15195
15296#[ cfg( test) ]
0 commit comments