18 using value_type = json::value;
19 using object_type = json::object;
20 using array_type = json::array;
21 using string_type = std::string;
22 using number_type = double;
23 using integer_type = std::int64_t;
24 using boolean_type = bool;
29 if (val.kind() == json::kind::bool_)
return type::boolean;
30 if (val.kind() == json::kind::int64)
return type::integer;
31 if (val.kind() == json::kind::uint64)
33 if (val.kind() == json::kind::double_)
return type::number;
34 if (val.kind() == json::kind::string)
return type::string;
35 if (val.kind() == json::kind::array)
return type::array;
36 if (val.kind() == json::kind::object)
return type::object;
38 throw std::logic_error(
"invalid type");
41 static object_type as_object(
const value_type& val) {
42 if (val.kind() != json::kind::object)
throw std::bad_cast();
43 return val.get_object();
46 static array_type as_array(
const value_type& val) {
47 if (val.kind() != json::kind::array)
throw std::bad_cast();
48 return val.get_array();
51 static string_type as_string(
const value_type& val) {
52 if (val.kind() != json::kind::string)
throw std::bad_cast();
53 return string_type{val.get_string()};
56 static integer_type as_integer(
const value_type& val) {
58 case json::kind::int64:
return val.get_int64();
59 case json::kind::uint64:
return static_cast<int64_t
>(val.get_uint64());
60 default:
throw std::bad_cast();
64 static boolean_type as_boolean(
const value_type& val) {
65 if (val.kind() != json::kind::bool_)
throw std::bad_cast();
66 return val.get_bool();
69 static number_type as_number(
const value_type& val) {
70 if (val.kind() != json::kind::double_)
throw std::bad_cast();
71 return val.get_double();
74 static bool parse(value_type& val, string_type str) {
75 val = json::parse(str);
79 static std::string serialize(
const value_type& val) {
return json::serialize(val); }