! @param[in] j JSON value to serialize */
| 13095 | @param[in] j JSON value to serialize |
| 13096 | */ |
| 13097 | void write_msgpack(const BasicJsonType& j) |
| 13098 | { |
| 13099 | switch (j.type()) |
| 13100 | { |
| 13101 | case value_t::null: // nil |
| 13102 | { |
| 13103 | oa->write_character(to_char_type(0xC0)); |
| 13104 | break; |
| 13105 | } |
| 13106 | |
| 13107 | case value_t::boolean: // true and false |
| 13108 | { |
| 13109 | oa->write_character(j.m_value.boolean |
| 13110 | ? to_char_type(0xC3) |
| 13111 | : to_char_type(0xC2)); |
| 13112 | break; |
| 13113 | } |
| 13114 | |
| 13115 | case value_t::number_integer: |
| 13116 | { |
| 13117 | if (j.m_value.number_integer >= 0) |
| 13118 | { |
| 13119 | // MessagePack does not differentiate between positive |
| 13120 | // signed integers and unsigned integers. Therefore, we used |
| 13121 | // the code from the value_t::number_unsigned case here. |
| 13122 | if (j.m_value.number_unsigned < 128) |
| 13123 | { |
| 13124 | // positive fixnum |
| 13125 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 13126 | } |
| 13127 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)()) |
| 13128 | { |
| 13129 | // uint 8 |
| 13130 | oa->write_character(to_char_type(0xCC)); |
| 13131 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 13132 | } |
| 13133 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)()) |
| 13134 | { |
| 13135 | // uint 16 |
| 13136 | oa->write_character(to_char_type(0xCD)); |
| 13137 | write_number(static_cast<std::uint16_t>(j.m_value.number_integer)); |
| 13138 | } |
| 13139 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)()) |
| 13140 | { |
| 13141 | // uint 32 |
| 13142 | oa->write_character(to_char_type(0xCE)); |
| 13143 | write_number(static_cast<std::uint32_t>(j.m_value.number_integer)); |
| 13144 | } |
| 13145 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)()) |
| 13146 | { |
| 13147 | // uint 64 |
| 13148 | oa->write_character(to_char_type(0xCF)); |
| 13149 | write_number(static_cast<std::uint64_t>(j.m_value.number_integer)); |
| 13150 | } |
| 13151 | } |
| 13152 | else |
| 13153 | { |
| 13154 | if (j.m_value.number_integer >= -32) |
no test coverage detected