Skip to content

Commit dde0bca

Browse files
committed
modify decode_any function
1 parent e182213 commit dde0bca

File tree

1 file changed

+12
-68
lines changed

1 file changed

+12
-68
lines changed

rust/cbork-utils/src/decode_helper.rs

Lines changed: 12 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
8282
pub 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

Comments
 (0)