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_MESSAGE_DEF_H_
11 #define UPB_REFLECTION_MESSAGE_DEF_H_
12
13 #include "upb/base/string_view.h"
14 #include "upb/reflection/common.h"
15
16 // Must be last.
17 #include "upb/port/def.inc"
18
19 // Well-known field tag numbers for map-entry messages.
20 #define kUpb_MapEntry_KeyFieldNumber 1
21 #define kUpb_MapEntry_ValueFieldNumber 2
22
23 // Well-known field tag numbers for Any messages.
24 #define kUpb_Any_TypeFieldNumber 1
25 #define kUpb_Any_ValueFieldNumber 2
26
27 // Well-known field tag numbers for duration messages.
28 #define kUpb_Duration_SecondsFieldNumber 1
29 #define kUpb_Duration_NanosFieldNumber 2
30
31 // Well-known field tag numbers for timestamp messages.
32 #define kUpb_Timestamp_SecondsFieldNumber 1
33 #define kUpb_Timestamp_NanosFieldNumber 2
34
35 // All the different kind of well known type messages. For simplicity of check,
36 // number wrappers and string wrappers are grouped together. Make sure the
37 // order and number of these groups are not changed.
38 typedef enum {
39 kUpb_WellKnown_Unspecified,
40 kUpb_WellKnown_Any,
41 kUpb_WellKnown_FieldMask,
42 kUpb_WellKnown_Duration,
43 kUpb_WellKnown_Timestamp,
44
45 // number wrappers
46 kUpb_WellKnown_DoubleValue,
47 kUpb_WellKnown_FloatValue,
48 kUpb_WellKnown_Int64Value,
49 kUpb_WellKnown_UInt64Value,
50 kUpb_WellKnown_Int32Value,
51 kUpb_WellKnown_UInt32Value,
52
53 // string wrappers
54 kUpb_WellKnown_StringValue,
55 kUpb_WellKnown_BytesValue,
56 kUpb_WellKnown_BoolValue,
57 kUpb_WellKnown_Value,
58 kUpb_WellKnown_ListValue,
59 kUpb_WellKnown_Struct,
60 } upb_WellKnown;
61
62 #ifdef __cplusplus
63 extern "C" {
64 #endif
65
66 const upb_MessageDef* upb_MessageDef_ContainingType(const upb_MessageDef* m);
67
68 const upb_ExtensionRange* upb_MessageDef_ExtensionRange(const upb_MessageDef* m,
69 int i);
70 int upb_MessageDef_ExtensionRangeCount(const upb_MessageDef* m);
71
72 UPB_API const upb_FieldDef* upb_MessageDef_Field(const upb_MessageDef* m,
73 int i);
74 UPB_API int upb_MessageDef_FieldCount(const upb_MessageDef* m);
75
76 UPB_API const upb_FileDef* upb_MessageDef_File(const upb_MessageDef* m);
77
78 // Returns a field by either JSON name or regular proto name.
79 const upb_FieldDef* upb_MessageDef_FindByJsonNameWithSize(
80 const upb_MessageDef* m, const char* name, size_t size);
upb_MessageDef_FindByJsonName(const upb_MessageDef * m,const char * name)81 UPB_INLINE const upb_FieldDef* upb_MessageDef_FindByJsonName(
82 const upb_MessageDef* m, const char* name) {
83 return upb_MessageDef_FindByJsonNameWithSize(m, name, strlen(name));
84 }
85
86 // Lookup of either field or oneof by name. Returns whether either was found.
87 // If the return is true, then the found def will be set, and the non-found
88 // one set to NULL.
89 UPB_API bool upb_MessageDef_FindByNameWithSize(const upb_MessageDef* m,
90 const char* name, size_t size,
91 const upb_FieldDef** f,
92 const upb_OneofDef** o);
upb_MessageDef_FindByName(const upb_MessageDef * m,const char * name,const upb_FieldDef ** f,const upb_OneofDef ** o)93 UPB_INLINE bool upb_MessageDef_FindByName(const upb_MessageDef* m,
94 const char* name,
95 const upb_FieldDef** f,
96 const upb_OneofDef** o) {
97 return upb_MessageDef_FindByNameWithSize(m, name, strlen(name), f, o);
98 }
99
100 const upb_FieldDef* upb_MessageDef_FindFieldByName(const upb_MessageDef* m,
101 const char* name);
102 UPB_API const upb_FieldDef* upb_MessageDef_FindFieldByNameWithSize(
103 const upb_MessageDef* m, const char* name, size_t size);
104 UPB_API const upb_FieldDef* upb_MessageDef_FindFieldByNumber(
105 const upb_MessageDef* m, uint32_t i);
106 const upb_OneofDef* upb_MessageDef_FindOneofByName(const upb_MessageDef* m,
107 const char* name);
108 UPB_API const upb_OneofDef* upb_MessageDef_FindOneofByNameWithSize(
109 const upb_MessageDef* m, const char* name, size_t size);
110 UPB_API const char* upb_MessageDef_FullName(const upb_MessageDef* m);
111 bool upb_MessageDef_HasOptions(const upb_MessageDef* m);
112 bool upb_MessageDef_IsMapEntry(const upb_MessageDef* m);
113 bool upb_MessageDef_IsMessageSet(const upb_MessageDef* m);
114
115 // Creates a mini descriptor string for a message, returns true on success.
116 bool upb_MessageDef_MiniDescriptorEncode(const upb_MessageDef* m, upb_Arena* a,
117 upb_StringView* out);
118
119 UPB_API const upb_MiniTable* upb_MessageDef_MiniTable(const upb_MessageDef* m);
120 const char* upb_MessageDef_Name(const upb_MessageDef* m);
121
122 const upb_EnumDef* upb_MessageDef_NestedEnum(const upb_MessageDef* m, int i);
123 const upb_FieldDef* upb_MessageDef_NestedExtension(const upb_MessageDef* m,
124 int i);
125 const upb_MessageDef* upb_MessageDef_NestedMessage(const upb_MessageDef* m,
126 int i);
127
128 int upb_MessageDef_NestedEnumCount(const upb_MessageDef* m);
129 int upb_MessageDef_NestedExtensionCount(const upb_MessageDef* m);
130 int upb_MessageDef_NestedMessageCount(const upb_MessageDef* m);
131
132 UPB_API const upb_OneofDef* upb_MessageDef_Oneof(const upb_MessageDef* m,
133 int i);
134 UPB_API int upb_MessageDef_OneofCount(const upb_MessageDef* m);
135 int upb_MessageDef_RealOneofCount(const upb_MessageDef* m);
136
137 const UPB_DESC(MessageOptions) *
138 upb_MessageDef_Options(const upb_MessageDef* m);
139 const UPB_DESC(FeatureSet) *
140 upb_MessageDef_ResolvedFeatures(const upb_MessageDef* m);
141
142 upb_StringView upb_MessageDef_ReservedName(const upb_MessageDef* m, int i);
143 int upb_MessageDef_ReservedNameCount(const upb_MessageDef* m);
144
145 const upb_MessageReservedRange* upb_MessageDef_ReservedRange(
146 const upb_MessageDef* m, int i);
147 int upb_MessageDef_ReservedRangeCount(const upb_MessageDef* m);
148
149 UPB_API upb_Syntax upb_MessageDef_Syntax(const upb_MessageDef* m);
150 UPB_API upb_WellKnown upb_MessageDef_WellKnownType(const upb_MessageDef* m);
151
152 #ifdef __cplusplus
153 } /* extern "C" */
154 #endif
155
156 #include "upb/port/undef.inc"
157
158 #endif /* UPB_REFLECTION_MESSAGE_DEF_H_ */
159