tinycbor 0.12.2

A tiny CBOR codec library.
Documentation
#![cfg(feature = "std")]

const VECTORS: &[(&str, &str)] = &[
    (r#"0"#, "00"),
    (r#"1"#, "01"),
    (r#"10"#, "0a"),
    (r#"23"#, "17"),
    (r#"24"#, "1818"),
    (r#"25"#, "1819"),
    (r#"100"#, "1864"),
    (r#"1000"#, "1903e8"),
    (r#"1000000"#, "1a000f4240"),
    (r#"1000000000000"#, "1b000000e8d4a51000"),
    (r#"18446744073709551615"#, "1bffffffffffffffff"),
    (r#"-18446744073709551616"#, "3bffffffffffffffff"),
    (
        r#"2(h'01 00 00 00 00 00 00 00 00')"#,
        "c249010000000000000000",
    ),
    (
        r#"3(h'01 00 00 00 00 00 00 00 00')"#,
        "c349010000000000000000",
    ),
    (r#"-1"#, "20"),
    (r#"-10"#, "29"),
    (r#"-100"#, "3863"),
    (r#"-1000"#, "3903e7"),
    (r#"0e0"#, "f90000"),
    (r#"-0e0"#, "f98000"),
    (r#"1e0"#, "f93c00"),
    (r#"1.1e0"#, "fb3ff199999999999a"),
    (r#"1.5e0"#, "f93e00"),
    (r#"6.5504e4"#, "f97bff"),
    (r#"1e5"#, "fa47c35000"),
    (r#"3.4028234663852886e38"#, "fa7f7fffff"),
    (r#"1e300"#, "fb7e37e43c8800759c"),
    (r#"5.960464477539063e-8"#, "f90001"),
    (r#"6.103515625e-5"#, "f90400"),
    (r#"-4e0"#, "f9c400"),
    (r#"-4.1e0"#, "fbc010666666666666"),
    (r#"inf"#, "f97c00"),
    (r#"NaN"#, "f97e00"),
    (r#"-inf"#, "f9fc00"),
    (r#"inf"#, "fa7f800000"),
    (r#"NaN"#, "fa7fc00000"),
    (r#"-inf"#, "faff800000"),
    (r#"inf"#, "fb7ff0000000000000"),
    (r#"NaN"#, "fb7ff8000000000000"),
    (r#"-inf"#, "fbfff0000000000000"),
    (r#"false"#, "f4"),
    (r#"true"#, "f5"),
    (r#"null"#, "f6"),
    (r#"undefined"#, "f7"),
    (r#"simple(16)"#, "f0"),
    (r#"simple(255)"#, "f8ff"),
    (
        r#"0("2013-03-21T20:04:00Z")"#,
        "c074323031332d30332d32315432303a30343a30305a",
    ),
    (r#"1(1363896240)"#, "c11a514b67b0"),
    (r#"1(1.3638962405e9)"#, "c1fb41d452d9ec200000"),
    (r#"23(h'01 02 03 04')"#, "d74401020304"),
    (r#"24(h'64 49 45 54 46')"#, "d818456449455446"),
    (
        r#"32("http://www.example.com")"#,
        "d82076687474703a2f2f7777772e6578616d706c652e636f6d",
    ),
    (r#"h''"#, "40"),
    (r#"h'01 02 03 04'"#, "4401020304"),
    (r#""""#, "60"),
    (r#""a""#, "6161"),
    (r#""IETF""#, "6449455446"),
    (r#"""\""#, "62225c"),
    (r#""ü""#, "62c3bc"),
    (r#""水""#, "63e6b0b4"),
    (r#""𐅑""#, "64f0908591"),
    (r#"[]"#, "80"),
    (r#"[1, 2, 3]"#, "83010203"),
    (r#"[1, [2, 3], [4, 5]]"#, "8301820203820405"),
    (
        r#"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]"#,
        "98190102030405060708090a0b0c0d0e0f101112131415161718181819",
    ),
    (r#"{}"#, "a0"),
    (r#"{1: 2, 3: 4}"#, "a201020304"),
    (r#"{"a": 1, "b": [2, 3]}"#, "a26161016162820203"),
    (r#"["a", {"b": "c"}]"#, "826161a161626163"),
    (
        r#"{"a": "A", "b": "B", "c": "C", "d": "D", "e": "E"}"#,
        "a56161614161626142616361436164614461656145",
    ),
    (r#"(_ h'01 02', h'03 04 05')"#, "5f42010243030405ff"),
    (r#"(_ "strea", "ming")"#, "7f657374726561646d696e67ff"),
    (r#"[_ ]"#, "9fff"),
    (r#"[_ 1, [2, 3], [_ 4, 5]]"#, "9f018202039f0405ffff"),
    (r#"[_ 1, [2, 3], [4, 5]]"#, "9f01820203820405ff"),
    (r#"[1, [2, 3], [_ 4, 5]]"#, "83018202039f0405ff"),
    (r#"[1, [_ 2, 3], [4, 5]]"#, "83019f0203ff820405"),
    (
        r#"[_ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]"#,
        "9f0102030405060708090a0b0c0d0e0f101112131415161718181819ff",
    ),
    (r#"{_ "a": 1, "b": [_ 2, 3]}"#, "bf61610161629f0203ffff"),
    (r#"["a", {_ "b": "c"}]"#, "826161bf61626163ff"),
    (r#"{_ "Fun": true, "Amt": -2}"#, "bf6346756ef563416d7421ff"),
];

use tinycbor::Decoder;

#[test]
fn test() {
    for (s, x) in VECTORS {
        let h = const_hex::decode(x).unwrap();
        let decoder = Decoder(&h);
        assert_eq!(*s, format!("{}", decoder), "failed input: \"{}\"", x)
    }

    let mut ss = String::new();
    let mut xx = String::new();

    for (s, x) in VECTORS {
        ss.push_str(s);
        xx.push_str(x)
    }

    let h = const_hex::decode(xx).unwrap();
    let decoder = Decoder(&h);
    assert_eq!(ss, format!("{}", decoder))
}