1c5f01b2fSopenharmony_ci#include <iostream>
2c5f01b2fSopenharmony_ci#include <nlohmann/json.hpp>
3c5f01b2fSopenharmony_ci
4c5f01b2fSopenharmony_ciusing json = nlohmann::json;
5c5f01b2fSopenharmony_ci
6c5f01b2fSopenharmony_cinamespace ns
7c5f01b2fSopenharmony_ci{
8c5f01b2fSopenharmony_cienum class Color
9c5f01b2fSopenharmony_ci{
10c5f01b2fSopenharmony_ci    red, green, blue, unknown
11c5f01b2fSopenharmony_ci};
12c5f01b2fSopenharmony_ci
13c5f01b2fSopenharmony_ciNLOHMANN_JSON_SERIALIZE_ENUM(Color,
14c5f01b2fSopenharmony_ci{
15c5f01b2fSopenharmony_ci    { Color::unknown, "unknown" }, { Color::red, "red" },
16c5f01b2fSopenharmony_ci    { Color::green, "green" }, { Color::blue, "blue" },
17c5f01b2fSopenharmony_ci    { Color::red, "rot" } // a second conversion for Color::red
18c5f01b2fSopenharmony_ci})
19c5f01b2fSopenharmony_ci}
20c5f01b2fSopenharmony_ci
21c5f01b2fSopenharmony_ciint main()
22c5f01b2fSopenharmony_ci{
23c5f01b2fSopenharmony_ci    // serialization
24c5f01b2fSopenharmony_ci    json j_red = ns::Color::red;
25c5f01b2fSopenharmony_ci    std::cout << static_cast<int>(ns::Color::red) << " -> " << j_red << std::endl;
26c5f01b2fSopenharmony_ci
27c5f01b2fSopenharmony_ci    // deserialization
28c5f01b2fSopenharmony_ci    json j_rot = "rot";
29c5f01b2fSopenharmony_ci    auto rot = j_rot.get<ns::Color>();
30c5f01b2fSopenharmony_ci    auto red = j_red.get<ns::Color>();
31c5f01b2fSopenharmony_ci    std::cout << j_rot << " -> " << static_cast<int>(rot) << std::endl;
32c5f01b2fSopenharmony_ci    std::cout << j_red << " -> " << static_cast<int>(red) << std::endl;
33c5f01b2fSopenharmony_ci}
34