Add upb_MiniTableField_IsClosedEnum API.

PiperOrigin-RevId: 494269273
pull/13171/head
Protobuf Team Bot 2 years ago committed by Copybara-Service
parent e231dc955b
commit 9e89142283
  1. 6
      upb/message/accessors.h
  2. 34
      upb/message/accessors_test.cc

@ -515,6 +515,12 @@ UPB_API_INLINE upb_Array* upb_MiniTable_GetMutableArray(
void* upb_MiniTable_ResizeArray(upb_Message* msg,
const upb_MiniTableField* field, size_t len,
upb_Arena* arena);
UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(
const upb_MiniTableField* field) {
return field->descriptortype == kUpb_FieldType_Enum;
}
typedef enum {
kUpb_GetExtension_Ok,
kUpb_GetExtension_NotPresent,

@ -38,8 +38,10 @@
#include "google/protobuf/test_messages_proto3.upb.h"
#include "upb/base/string_view.h"
#include "upb/collections/array.h"
#include "upb/mini_table/common.h"
#include "upb/mini_table/decode.h"
#include "upb/mini_table/encode_internal.hpp"
#include "upb/mini_table/field_internal.h"
#include "upb/test/test.upb.h"
#include "upb/upb.h"
#include "upb/wire/decode.h"
@ -676,4 +678,36 @@ TEST(GeneratedCode, PromoteUnknownRepeatedMessage) {
upb_Arena_Free(arena);
}
TEST(GeneratedCode, EnumClosedCheck) {
upb_Arena* arena = upb_Arena_New();
upb::MtDataEncoder e;
e.StartMessage(0);
e.PutField(kUpb_FieldType_Int32, 4, 0);
e.PutField(kUpb_FieldType_Enum, 5, 0);
upb_Status status;
upb_Status_Clear(&status);
upb_MiniTable* table =
upb_MiniTable_Build(e.data().data(), e.data().size(), arena, &status);
const upb_MiniTableField* enumField = &table->fields[1];
EXPECT_EQ(upb_MiniTableField_Type(enumField), kUpb_FieldType_Enum);
EXPECT_FALSE(upb_MiniTableField_IsClosedEnum(enumField));
upb::MtDataEncoder e2;
e2.StartMessage(0);
e2.PutField(kUpb_FieldType_Int32, 4, 0);
e2.PutField(kUpb_FieldType_Enum, 6, kUpb_FieldModifier_IsClosedEnum);
upb_Status_Clear(&status);
table =
upb_MiniTable_Build(e2.data().data(), e2.data().size(), arena, &status);
const upb_MiniTableField* closedEnumField = &table->fields[1];
EXPECT_EQ(upb_MiniTableField_Type(closedEnumField), kUpb_FieldType_Enum);
EXPECT_TRUE(upb_MiniTableField_IsClosedEnum(closedEnumField));
upb_Arena_Free(arena);
}
} // namespace

Loading…
Cancel
Save