! @param[in] j JSON value to serialize */
| 13170 | @param[in] j JSON value to serialize |
| 13171 | */ |
| 13172 | void write_msgpack(const BasicJsonType& j) |
| 13173 | { |
| 13174 | switch (j.type()) |
| 13175 | { |
| 13176 | case value_t::null: // nil |
| 13177 | { |
| 13178 | oa->write_character(to_char_type(0xC0)); |
| 13179 | break; |
| 13180 | } |
| 13181 | |
| 13182 | case value_t::boolean: // true and false |
| 13183 | { |
| 13184 | oa->write_character(j.m_value.boolean |
| 13185 | ? to_char_type(0xC3) |
| 13186 | : to_char_type(0xC2)); |
| 13187 | break; |
| 13188 | } |
| 13189 | |
| 13190 | case value_t::number_integer: |
| 13191 | { |
| 13192 | if (j.m_value.number_integer >= 0) |
| 13193 | { |
| 13194 | // MessagePack does not differentiate between positive |
| 13195 | // signed integers and unsigned integers. Therefore, we used |
| 13196 | // the code from the value_t::number_unsigned case here. |
| 13197 | if (j.m_value.number_unsigned < 128) |
| 13198 | { |
| 13199 | // positive fixnum |
| 13200 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 13201 | } |
| 13202 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)()) |
| 13203 | { |
| 13204 | // uint 8 |
| 13205 | oa->write_character(to_char_type(0xCC)); |
| 13206 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 13207 | } |
| 13208 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)()) |
| 13209 | { |
| 13210 | // uint 16 |
| 13211 | oa->write_character(to_char_type(0xCD)); |
| 13212 | write_number(static_cast<std::uint16_t>(j.m_value.number_integer)); |
| 13213 | } |
| 13214 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)()) |
| 13215 | { |
| 13216 | // uint 32 |
| 13217 | oa->write_character(to_char_type(0xCE)); |
| 13218 | write_number(static_cast<std::uint32_t>(j.m_value.number_integer)); |
| 13219 | } |
| 13220 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)()) |
| 13221 | { |
| 13222 | // uint 64 |
| 13223 | oa->write_character(to_char_type(0xCF)); |
| 13224 | write_number(static_cast<std::uint64_t>(j.m_value.number_integer)); |
| 13225 | } |
| 13226 | } |
| 13227 | else |
| 13228 | { |
| 13229 | if (j.m_value.number_integer >= -32) |
no test coverage detected