use cbor_tools::{
Array, CborType, Decode, DecodeSymbolic, Encode, EncodeSymbolic, Indefinite, TextString,
};
use serde::Serialize;
fn decode_print(bytes: &[u8]) -> String {
let decoded: serde_cbor::Value = serde_cbor::from_slice(bytes).unwrap();
format!("{:?}", decoded)
}
fn decode_with_serde_cbor() {
let array1 = CborType::from(vec![1, 2]).encode();
println!("array1: {}", decode_print(&array1));
let a = Array::from(vec![1, 2]);
let array2 = CborType::Indefinite(Indefinite::Array(a)).encode();
println!("array2: {}", decode_print(&array2));
let string1 = CborType::from("abcdef").encode();
println!("string1: {}", decode_print(&string1));
let parts = ["abc", "def"]
.iter()
.map(|s| TextString::from(*s))
.collect();
let string2 = CborType::Indefinite(Indefinite::TextString(parts)).encode();
println!("string2: {}", decode_print(&string2));
let parts = ["abc", "def", "ghi"]
.iter()
.map(|s| TextString::from(*s))
.collect();
let mut elements = CborType::Indefinite(Indefinite::TextString(parts)).encode_symbolic();
elements.remove(3);
let string3 = elements.encode();
println!("string3: {:#?}", decode_print(&string3));
}
#[derive(Serialize)]
struct Struct1 {
name: String,
id: u32,
}
fn examine_serde_encode() {
let my_struct1 = Struct1 {
name: "Alice".into(),
id: 1234,
};
let encoded = serde_cbor::to_vec(&my_struct1).unwrap();
println!("my_struct1 encoded: {}", hex_fmt::HexFmt(&encoded));
println!("my_struct1 symbols:");
for element in encoded.decode_symbolic().unwrap() {
println!(" {}", element);
}
println!("my_struct1 decoded: {:#?}", encoded.decode());
}
fn main() {
decode_with_serde_cbor();
examine_serde_encode();
}