in src/codec/object.cpp [30:49]
void object_t_base::decode(decode_context &context, void *value) const {
uint_fast32_t uniq_seen_required = 0;
detail::bitset<64> seen_required(_fields.num_required_fields());
detail::decode_object<string_t>(context, [&](const std::string &key) {
const auto *field = _fields.find(key);
if (json_unlikely(!field)) {
return detail::skip_value(context);
}
field->decode(context, value);
if (field->is_required()) {
const auto seen = seen_required.test_and_set(field->required_field_idx());
uniq_seen_required += (1 - seen); // 'seen' is 1 when the field is a duplicate; 0 otherwise
}
});
const auto is_missing_req_fields = (uniq_seen_required != _fields.num_required_fields());
detail::fail_if(context, is_missing_req_fields, "Missing required field(s)");
}