! @param[in] j JSON value to serialize */
| 15326 | @param[in] j JSON value to serialize |
| 15327 | */ |
| 15328 | void write_msgpack(const BasicJsonType& j) |
| 15329 | { |
| 15330 | switch (j.type()) |
| 15331 | { |
| 15332 | case value_t::null: // nil |
| 15333 | { |
| 15334 | oa->write_character(to_char_type(0xC0)); |
| 15335 | break; |
| 15336 | } |
| 15337 | |
| 15338 | case value_t::boolean: // true and false |
| 15339 | { |
| 15340 | oa->write_character(j.m_value.boolean |
| 15341 | ? to_char_type(0xC3) |
| 15342 | : to_char_type(0xC2)); |
| 15343 | break; |
| 15344 | } |
| 15345 | |
| 15346 | case value_t::number_integer: |
| 15347 | { |
| 15348 | if (j.m_value.number_integer >= 0) |
| 15349 | { |
| 15350 | // MessagePack does not differentiate between positive |
| 15351 | // signed integers and unsigned integers. Therefore, we used |
| 15352 | // the code from the value_t::number_unsigned case here. |
| 15353 | if (j.m_value.number_unsigned < 128) |
| 15354 | { |
| 15355 | // positive fixnum |
| 15356 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 15357 | } |
| 15358 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)()) |
| 15359 | { |
| 15360 | // uint 8 |
| 15361 | oa->write_character(to_char_type(0xCC)); |
| 15362 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 15363 | } |
| 15364 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)()) |
| 15365 | { |
| 15366 | // uint 16 |
| 15367 | oa->write_character(to_char_type(0xCD)); |
| 15368 | write_number(static_cast<std::uint16_t>(j.m_value.number_integer)); |
| 15369 | } |
| 15370 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)()) |
| 15371 | { |
| 15372 | // uint 32 |
| 15373 | oa->write_character(to_char_type(0xCE)); |
| 15374 | write_number(static_cast<std::uint32_t>(j.m_value.number_integer)); |
| 15375 | } |
| 15376 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)()) |
| 15377 | { |
| 15378 | // uint 64 |
| 15379 | oa->write_character(to_char_type(0xCF)); |
| 15380 | write_number(static_cast<std::uint64_t>(j.m_value.number_integer)); |
| 15381 | } |
| 15382 | } |
| 15383 | else |
| 15384 | { |
| 15385 | if (j.m_value.number_integer >= -32) |
no test coverage detected