| 1113 | } |
| 1114 | |
| 1115 | static PyObject *read_primitive_item(Buffer *buffer, uint8_t type_id) { |
| 1116 | Error error; |
| 1117 | switch (static_cast<TypeId>(type_id)) { |
| 1118 | case TypeId::STRING: |
| 1119 | return read_python_string(buffer); |
| 1120 | case TypeId::VARINT64: |
| 1121 | case TypeId::INT64: { |
| 1122 | const int64_t v = static_cast<TypeId>(type_id) == TypeId::INT64 |
| 1123 | ? buffer->read_int64(error) |
| 1124 | : buffer->read_var_int64(error); |
| 1125 | if (FORY_PREDICT_FALSE(!error.ok())) { |
| 1126 | set_buffer_error(error); |
| 1127 | return nullptr; |
| 1128 | } |
| 1129 | return PyLong_FromLongLong(v); |
| 1130 | } |
| 1131 | case TypeId::VARINT32: |
| 1132 | case TypeId::INT32: { |
| 1133 | const int32_t v = static_cast<TypeId>(type_id) == TypeId::INT32 |
| 1134 | ? buffer->read_int32(error) |
| 1135 | : buffer->read_var_int32(error); |
| 1136 | if (FORY_PREDICT_FALSE(!error.ok())) { |
| 1137 | set_buffer_error(error); |
| 1138 | return nullptr; |
| 1139 | } |
| 1140 | return PyLong_FromLong(v); |
| 1141 | } |
| 1142 | case TypeId::VAR_UINT64: |
| 1143 | case TypeId::UINT64: |
| 1144 | case TypeId::TAGGED_UINT64: { |
| 1145 | uint64_t v = 0; |
| 1146 | if (static_cast<TypeId>(type_id) == TypeId::VAR_UINT64) { |
| 1147 | v = buffer->read_var_uint64(error); |
| 1148 | } else if (static_cast<TypeId>(type_id) == TypeId::TAGGED_UINT64) { |
| 1149 | v = buffer->read_tagged_uint64(error); |
| 1150 | } else { |
| 1151 | v = buffer->read_uint64(error); |
| 1152 | } |
| 1153 | if (FORY_PREDICT_FALSE(!error.ok())) { |
| 1154 | set_buffer_error(error); |
| 1155 | return nullptr; |
| 1156 | } |
| 1157 | return PyLong_FromUnsignedLongLong(v); |
| 1158 | } |
| 1159 | case TypeId::VAR_UINT32: |
| 1160 | case TypeId::UINT32: { |
| 1161 | const uint32_t v = static_cast<TypeId>(type_id) == TypeId::UINT32 |
| 1162 | ? buffer->read_uint32(error) |
| 1163 | : buffer->read_var_uint32(error); |
| 1164 | if (FORY_PREDICT_FALSE(!error.ok())) { |
| 1165 | set_buffer_error(error); |
| 1166 | return nullptr; |
| 1167 | } |
| 1168 | return PyLong_FromUnsignedLong(v); |
| 1169 | } |
| 1170 | case TypeId::BOOL: { |
| 1171 | const uint8_t v = buffer->read_uint8(error); |
| 1172 | if (FORY_PREDICT_FALSE(!error.ok())) { |
no test coverage detected