1c5f01b2fSopenharmony_ci#include <iostream>
2c5f01b2fSopenharmony_ci#include <iomanip>
3c5f01b2fSopenharmony_ci#include <nlohmann/json.hpp>
4c5f01b2fSopenharmony_ci
5c5f01b2fSopenharmony_ciusing json = nlohmann::json;
6c5f01b2fSopenharmony_ciusing namespace nlohmann::literals;
7c5f01b2fSopenharmony_ci
8c5f01b2fSopenharmony_ci// function to print BJData's diagnostic format
9c5f01b2fSopenharmony_civoid print_byte(uint8_t byte)
10c5f01b2fSopenharmony_ci{
11c5f01b2fSopenharmony_ci    if (32 < byte and byte < 128)
12c5f01b2fSopenharmony_ci    {
13c5f01b2fSopenharmony_ci        std::cout << (char)byte;
14c5f01b2fSopenharmony_ci    }
15c5f01b2fSopenharmony_ci    else
16c5f01b2fSopenharmony_ci    {
17c5f01b2fSopenharmony_ci        std::cout << (int)byte;
18c5f01b2fSopenharmony_ci    }
19c5f01b2fSopenharmony_ci}
20c5f01b2fSopenharmony_ci
21c5f01b2fSopenharmony_ciint main()
22c5f01b2fSopenharmony_ci{
23c5f01b2fSopenharmony_ci    // create a JSON value
24c5f01b2fSopenharmony_ci    json j = R"({"compact": true, "schema": false})"_json;
25c5f01b2fSopenharmony_ci
26c5f01b2fSopenharmony_ci    // serialize it to BJData
27c5f01b2fSopenharmony_ci    std::vector<std::uint8_t> v = json::to_bjdata(j);
28c5f01b2fSopenharmony_ci
29c5f01b2fSopenharmony_ci    // print the vector content
30c5f01b2fSopenharmony_ci    for (auto& byte : v)
31c5f01b2fSopenharmony_ci    {
32c5f01b2fSopenharmony_ci        print_byte(byte);
33c5f01b2fSopenharmony_ci    }
34c5f01b2fSopenharmony_ci    std::cout << std::endl;
35c5f01b2fSopenharmony_ci
36c5f01b2fSopenharmony_ci    // create an array of numbers
37c5f01b2fSopenharmony_ci    json array = {1, 2, 3, 4, 5, 6, 7, 8};
38c5f01b2fSopenharmony_ci
39c5f01b2fSopenharmony_ci    // serialize it to BJData using default representation
40c5f01b2fSopenharmony_ci    std::vector<std::uint8_t> v_array = json::to_bjdata(array);
41c5f01b2fSopenharmony_ci    // serialize it to BJData using size optimization
42c5f01b2fSopenharmony_ci    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);
43c5f01b2fSopenharmony_ci    // serialize it to BJData using type optimization
44c5f01b2fSopenharmony_ci    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);
45c5f01b2fSopenharmony_ci
46c5f01b2fSopenharmony_ci    // print the vector contents
47c5f01b2fSopenharmony_ci    for (auto& byte : v_array)
48c5f01b2fSopenharmony_ci    {
49c5f01b2fSopenharmony_ci        print_byte(byte);
50c5f01b2fSopenharmony_ci    }
51c5f01b2fSopenharmony_ci    std::cout << std::endl;
52c5f01b2fSopenharmony_ci
53c5f01b2fSopenharmony_ci    for (auto& byte : v_array_size)
54c5f01b2fSopenharmony_ci    {
55c5f01b2fSopenharmony_ci        print_byte(byte);
56c5f01b2fSopenharmony_ci    }
57c5f01b2fSopenharmony_ci    std::cout << std::endl;
58c5f01b2fSopenharmony_ci
59c5f01b2fSopenharmony_ci    for (auto& byte : v_array_size_and_type)
60c5f01b2fSopenharmony_ci    {
61c5f01b2fSopenharmony_ci        print_byte(byte);
62c5f01b2fSopenharmony_ci    }
63c5f01b2fSopenharmony_ci    std::cout << std::endl;
64c5f01b2fSopenharmony_ci}
65