| 797 | |
| 798 | template <typename T> |
| 799 | inline void write_union_value_data(const T &value, WriteContext &ctx, |
| 800 | uint32_t type_id) { |
| 801 | using Inner = union_unwrap_optional_inner_t<T>; |
| 802 | const Inner &inner = unwrap_union_value(value); |
| 803 | if constexpr (std::is_integral_v<Inner> || std::is_enum_v<Inner>) { |
| 804 | switch (static_cast<TypeId>(type_id)) { |
| 805 | case TypeId::VAR_UINT32: |
| 806 | ctx.write_var_uint32(static_cast<uint32_t>(inner)); |
| 807 | return; |
| 808 | case TypeId::UINT32: |
| 809 | ctx.buffer().write_int32(static_cast<int32_t>(inner)); |
| 810 | return; |
| 811 | case TypeId::VAR_UINT64: |
| 812 | ctx.write_var_uint64(static_cast<uint64_t>(inner)); |
| 813 | return; |
| 814 | case TypeId::UINT64: |
| 815 | ctx.buffer().write_int64(static_cast<int64_t>(inner)); |
| 816 | return; |
| 817 | case TypeId::TAGGED_UINT64: |
| 818 | ctx.write_tagged_uint64(static_cast<uint64_t>(inner)); |
| 819 | return; |
| 820 | case TypeId::VARINT32: |
| 821 | ctx.write_var_int32(static_cast<int32_t>(inner)); |
| 822 | return; |
| 823 | case TypeId::INT32: |
| 824 | ctx.buffer().write_int32(static_cast<int32_t>(inner)); |
| 825 | return; |
| 826 | case TypeId::VARINT64: |
| 827 | ctx.write_var_int64(static_cast<int64_t>(inner)); |
| 828 | return; |
| 829 | case TypeId::INT64: |
| 830 | ctx.buffer().write_int64(static_cast<int64_t>(inner)); |
| 831 | return; |
| 832 | case TypeId::TAGGED_INT64: |
| 833 | ctx.write_tagged_int64(static_cast<int64_t>(inner)); |
| 834 | return; |
| 835 | default: |
| 836 | break; |
| 837 | } |
| 838 | } |
| 839 | Serializer<Inner>::write_data(inner, ctx); |
| 840 | } |
| 841 | |
| 842 | template <typename T> |
| 843 | inline T read_union_value_data(ReadContext &ctx, uint32_t type_id) { |
no test coverage detected