| 841 | |
| 842 | template <typename T> |
| 843 | inline T read_union_value_data(ReadContext &ctx, uint32_t type_id) { |
| 844 | using Inner = union_unwrap_optional_inner_t<T>; |
| 845 | Inner value{}; |
| 846 | if constexpr (std::is_integral_v<Inner> || std::is_enum_v<Inner>) { |
| 847 | switch (static_cast<TypeId>(type_id)) { |
| 848 | case TypeId::VAR_UINT32: |
| 849 | value = static_cast<Inner>(ctx.read_var_uint32(ctx.error())); |
| 850 | break; |
| 851 | case TypeId::UINT32: |
| 852 | value = static_cast<Inner>(ctx.read_uint32(ctx.error())); |
| 853 | break; |
| 854 | case TypeId::VAR_UINT64: |
| 855 | value = static_cast<Inner>(ctx.read_var_uint64(ctx.error())); |
| 856 | break; |
| 857 | case TypeId::UINT64: |
| 858 | value = static_cast<Inner>(ctx.read_uint64(ctx.error())); |
| 859 | break; |
| 860 | case TypeId::TAGGED_UINT64: |
| 861 | value = static_cast<Inner>(ctx.read_tagged_uint64(ctx.error())); |
| 862 | break; |
| 863 | case TypeId::VARINT32: |
| 864 | value = static_cast<Inner>(ctx.read_var_int32(ctx.error())); |
| 865 | break; |
| 866 | case TypeId::INT32: |
| 867 | value = static_cast<Inner>(ctx.read_int32(ctx.error())); |
| 868 | break; |
| 869 | case TypeId::VARINT64: |
| 870 | value = static_cast<Inner>(ctx.read_var_int64(ctx.error())); |
| 871 | break; |
| 872 | case TypeId::INT64: |
| 873 | value = static_cast<Inner>(ctx.read_int64(ctx.error())); |
| 874 | break; |
| 875 | case TypeId::TAGGED_INT64: |
| 876 | value = static_cast<Inner>(ctx.read_tagged_int64(ctx.error())); |
| 877 | break; |
| 878 | default: |
| 879 | value = Serializer<Inner>::read_data(ctx); |
| 880 | break; |
| 881 | } |
| 882 | } else { |
| 883 | value = Serializer<Inner>::read_data(ctx); |
| 884 | } |
| 885 | if (FORY_PREDICT_FALSE(ctx.has_error())) { |
| 886 | return default_union_case_value<T>(); |
| 887 | } |
| 888 | return wrap_union_case_value<T>(std::move(value)); |
| 889 | } |
| 890 | |
| 891 | template <typename T, typename F, size_t Index = 0> |
| 892 | inline bool dispatch_union_case(uint32_t case_id, F &&fn) { |
nothing calls this directly
no test coverage detected