! @param[in] j JSON value to serialize */
| 11599 | @param[in] j JSON value to serialize |
| 11600 | */ |
| 11601 | void write_msgpack(const BasicJsonType& j) |
| 11602 | { |
| 11603 | switch (j.type()) |
| 11604 | { |
| 11605 | case value_t::null: // nil |
| 11606 | { |
| 11607 | oa->write_character(to_char_type(0xC0)); |
| 11608 | break; |
| 11609 | } |
| 11610 | |
| 11611 | case value_t::boolean: // true and false |
| 11612 | { |
| 11613 | oa->write_character(j.m_value.boolean |
| 11614 | ? to_char_type(0xC3) |
| 11615 | : to_char_type(0xC2)); |
| 11616 | break; |
| 11617 | } |
| 11618 | |
| 11619 | case value_t::number_integer: |
| 11620 | { |
| 11621 | if (j.m_value.number_integer >= 0) |
| 11622 | { |
| 11623 | // MessagePack does not differentiate between positive |
| 11624 | // signed integers and unsigned integers. Therefore, we used |
| 11625 | // the code from the value_t::number_unsigned case here. |
| 11626 | if (j.m_value.number_unsigned < 128) |
| 11627 | { |
| 11628 | // positive fixnum |
| 11629 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 11630 | } |
| 11631 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)()) |
| 11632 | { |
| 11633 | // uint 8 |
| 11634 | oa->write_character(to_char_type(0xCC)); |
| 11635 | write_number(static_cast<std::uint8_t>(j.m_value.number_integer)); |
| 11636 | } |
| 11637 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)()) |
| 11638 | { |
| 11639 | // uint 16 |
| 11640 | oa->write_character(to_char_type(0xCD)); |
| 11641 | write_number(static_cast<std::uint16_t>(j.m_value.number_integer)); |
| 11642 | } |
| 11643 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)()) |
| 11644 | { |
| 11645 | // uint 32 |
| 11646 | oa->write_character(to_char_type(0xCE)); |
| 11647 | write_number(static_cast<std::uint32_t>(j.m_value.number_integer)); |
| 11648 | } |
| 11649 | else if (j.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)()) |
| 11650 | { |
| 11651 | // uint 64 |
| 11652 | oa->write_character(to_char_type(0xCF)); |
| 11653 | write_number(static_cast<std::uint64_t>(j.m_value.number_integer)); |
| 11654 | } |
| 11655 | } |
| 11656 | else |
| 11657 | { |
| 11658 | if (j.m_value.number_integer >= -32) |
no test coverage detected