• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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