#[cfg(feature = "tags")] mod tagtests { use serde_cbor::value::Value; use serde_cbor::{from_slice, to_vec}; fn decode_hex(s: &str) -> std::result::Result, std::num::ParseIntError> { (0..s.len()) .step_by(2) .map(|i| u8::from_str_radix(&s[i..i + 2], 16)) .collect() } // get bytes from http://cbor.me/ trees fn parse_cbor_me(example: &str) -> std::result::Result, std::num::ParseIntError> { let hex = example .split("\n") .flat_map(|line| line.split("#").take(1)) .collect::>() .join("") .replace(" ", ""); decode_hex(&hex) } #[test] fn tagged_cbor_roundtrip() { let data = r#" C1 # tag(1) 82 # array(2) C2 # tag(2) 63 # text(3) 666F6F # "foo" C3 # tag(3) A1 # map(1) C4 # tag(4) 61 # text(1) 61 # "a" C5 # tag(5) 61 # text(1) 62 # "b" "#; let bytes1 = parse_cbor_me(&data).unwrap(); let value1: Value = from_slice(&bytes1).unwrap(); let bytes2 = to_vec(&value1).unwrap(); let value2: Value = from_slice(&bytes2).unwrap(); assert_eq!(bytes1, bytes2); assert_eq!(value1, value2); } }