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 TaskState 9c5f01b2fSopenharmony_ci{ 10c5f01b2fSopenharmony_ci TS_STOPPED, 11c5f01b2fSopenharmony_ci TS_RUNNING, 12c5f01b2fSopenharmony_ci TS_COMPLETED, 13c5f01b2fSopenharmony_ci TS_INVALID = -1 14c5f01b2fSopenharmony_ci}; 15c5f01b2fSopenharmony_ci 16c5f01b2fSopenharmony_ciNLOHMANN_JSON_SERIALIZE_ENUM(TaskState, 17c5f01b2fSopenharmony_ci{ 18c5f01b2fSopenharmony_ci { TS_INVALID, nullptr }, 19c5f01b2fSopenharmony_ci { TS_STOPPED, "stopped" }, 20c5f01b2fSopenharmony_ci { TS_RUNNING, "running" }, 21c5f01b2fSopenharmony_ci { TS_COMPLETED, "completed" } 22c5f01b2fSopenharmony_ci}) 23c5f01b2fSopenharmony_ci 24c5f01b2fSopenharmony_cienum class Color 25c5f01b2fSopenharmony_ci{ 26c5f01b2fSopenharmony_ci red, green, blue, unknown 27c5f01b2fSopenharmony_ci}; 28c5f01b2fSopenharmony_ci 29c5f01b2fSopenharmony_ciNLOHMANN_JSON_SERIALIZE_ENUM(Color, 30c5f01b2fSopenharmony_ci{ 31c5f01b2fSopenharmony_ci { Color::unknown, "unknown" }, { Color::red, "red" }, 32c5f01b2fSopenharmony_ci { Color::green, "green" }, { Color::blue, "blue" } 33c5f01b2fSopenharmony_ci}) 34c5f01b2fSopenharmony_ci} // namespace ns 35c5f01b2fSopenharmony_ci 36c5f01b2fSopenharmony_ciint main() 37c5f01b2fSopenharmony_ci{ 38c5f01b2fSopenharmony_ci // serialization 39c5f01b2fSopenharmony_ci json j_stopped = ns::TS_STOPPED; 40c5f01b2fSopenharmony_ci json j_red = ns::Color::red; 41c5f01b2fSopenharmony_ci std::cout << "ns::TS_STOPPED -> " << j_stopped 42c5f01b2fSopenharmony_ci << ", ns::Color::red -> " << j_red << std::endl; 43c5f01b2fSopenharmony_ci 44c5f01b2fSopenharmony_ci // deserialization 45c5f01b2fSopenharmony_ci json j_running = "running"; 46c5f01b2fSopenharmony_ci json j_blue = "blue"; 47c5f01b2fSopenharmony_ci auto running = j_running.get<ns::TaskState>(); 48c5f01b2fSopenharmony_ci auto blue = j_blue.get<ns::Color>(); 49c5f01b2fSopenharmony_ci std::cout << j_running << " -> " << running 50c5f01b2fSopenharmony_ci << ", " << j_blue << " -> " << static_cast<int>(blue) << std::endl; 51c5f01b2fSopenharmony_ci 52c5f01b2fSopenharmony_ci // deserializing undefined JSON value to enum 53c5f01b2fSopenharmony_ci // (where the first map entry above is the default) 54c5f01b2fSopenharmony_ci json j_pi = 3.14; 55c5f01b2fSopenharmony_ci auto invalid = j_pi.get<ns::TaskState>(); 56c5f01b2fSopenharmony_ci auto unknown = j_pi.get<ns::Color>(); 57c5f01b2fSopenharmony_ci std::cout << j_pi << " -> " << invalid << ", " 58c5f01b2fSopenharmony_ci << j_pi << " -> " << static_cast<int>(unknown) << std::endl; 59c5f01b2fSopenharmony_ci} 60