1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2023 Google LLC. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 // IWYU pragma: private, include "upb/reflection/def.h" 9 10 #ifndef UPB_REFLECTION_FIELD_DEF_H_ 11 #define UPB_REFLECTION_FIELD_DEF_H_ 12 13 #include <stdint.h> 14 15 #include "upb/base/descriptor_constants.h" 16 #include "upb/base/string_view.h" 17 #include "upb/message/value.h" 18 #include "upb/mini_table/extension.h" 19 #include "upb/mini_table/field.h" 20 #include "upb/reflection/common.h" 21 22 // Must be last. 23 #include "upb/port/def.inc" 24 25 // Maximum field number allowed for FieldDefs. 26 // This is an inherent limit of the protobuf wire format. 27 #define kUpb_MaxFieldNumber ((1 << 29) - 1) 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 const upb_OneofDef* upb_FieldDef_ContainingOneof(const upb_FieldDef* f); 34 UPB_API const upb_MessageDef* upb_FieldDef_ContainingType( 35 const upb_FieldDef* f); 36 UPB_API upb_CType upb_FieldDef_CType(const upb_FieldDef* f); 37 UPB_API upb_MessageValue upb_FieldDef_Default(const upb_FieldDef* f); 38 UPB_API const upb_EnumDef* upb_FieldDef_EnumSubDef(const upb_FieldDef* f); 39 const upb_MessageDef* upb_FieldDef_ExtensionScope(const upb_FieldDef* f); 40 UPB_API const upb_FileDef* upb_FieldDef_File(const upb_FieldDef* f); 41 const char* upb_FieldDef_FullName(const upb_FieldDef* f); 42 bool upb_FieldDef_HasDefault(const upb_FieldDef* f); 43 bool upb_FieldDef_HasJsonName(const upb_FieldDef* f); 44 bool upb_FieldDef_HasOptions(const upb_FieldDef* f); 45 UPB_API bool upb_FieldDef_HasPresence(const upb_FieldDef* f); 46 bool upb_FieldDef_HasSubDef(const upb_FieldDef* f); 47 uint32_t upb_FieldDef_Index(const upb_FieldDef* f); 48 UPB_API bool upb_FieldDef_IsEnum(const upb_FieldDef* f); 49 bool upb_FieldDef_IsExtension(const upb_FieldDef* f); 50 UPB_API bool upb_FieldDef_IsMap(const upb_FieldDef* f); 51 bool upb_FieldDef_IsOptional(const upb_FieldDef* f); 52 UPB_API bool upb_FieldDef_IsPacked(const upb_FieldDef* f); 53 bool upb_FieldDef_IsPrimitive(const upb_FieldDef* f); 54 UPB_API bool upb_FieldDef_IsRepeated(const upb_FieldDef* f); 55 bool upb_FieldDef_IsRequired(const upb_FieldDef* f); 56 bool upb_FieldDef_IsString(const upb_FieldDef* f); 57 UPB_API bool upb_FieldDef_IsSubMessage(const upb_FieldDef* f); 58 UPB_API const char* upb_FieldDef_JsonName(const upb_FieldDef* f); 59 UPB_API upb_Label upb_FieldDef_Label(const upb_FieldDef* f); 60 uint32_t upb_FieldDef_LayoutIndex(const upb_FieldDef* f); 61 UPB_API const upb_MessageDef* upb_FieldDef_MessageSubDef(const upb_FieldDef* f); 62 bool _upb_FieldDef_ValidateUtf8(const upb_FieldDef* f); 63 bool _upb_FieldDef_IsGroupLike(const upb_FieldDef* f); 64 65 // Creates a mini descriptor string for a field, returns true on success. 66 bool upb_FieldDef_MiniDescriptorEncode(const upb_FieldDef* f, upb_Arena* a, 67 upb_StringView* out); 68 69 const upb_MiniTableField* upb_FieldDef_MiniTable(const upb_FieldDef* f); 70 const upb_MiniTableExtension* upb_FieldDef_MiniTableExtension( 71 const upb_FieldDef* f); 72 UPB_API const char* upb_FieldDef_Name(const upb_FieldDef* f); 73 UPB_API uint32_t upb_FieldDef_Number(const upb_FieldDef* f); 74 const UPB_DESC(FieldOptions) * upb_FieldDef_Options(const upb_FieldDef* f); 75 const UPB_DESC(FeatureSet) * 76 upb_FieldDef_ResolvedFeatures(const upb_FieldDef* f); 77 UPB_API const upb_OneofDef* upb_FieldDef_RealContainingOneof( 78 const upb_FieldDef* f); 79 UPB_API upb_FieldType upb_FieldDef_Type(const upb_FieldDef* f); 80 81 #ifdef __cplusplus 82 } /* extern "C" */ 83 #endif 84 85 #include "upb/port/undef.inc" 86 87 #endif /* UPB_REFLECTION_FIELD_DEF_H_ */ 88