OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 #import "GPBRuntimeTypes.h" | 33 #import "GPBRuntimeTypes.h" |
34 | 34 |
35 @class GPBEnumDescriptor; | 35 @class GPBEnumDescriptor; |
36 @class GPBFieldDescriptor; | 36 @class GPBFieldDescriptor; |
37 @class GPBFileDescriptor; | 37 @class GPBFileDescriptor; |
38 @class GPBOneofDescriptor; | 38 @class GPBOneofDescriptor; |
39 | 39 |
40 NS_ASSUME_NONNULL_BEGIN | 40 NS_ASSUME_NONNULL_BEGIN |
41 | 41 |
42 /** Syntax used in the proto file. */ | |
43 typedef NS_ENUM(uint8_t, GPBFileSyntax) { | 42 typedef NS_ENUM(uint8_t, GPBFileSyntax) { |
44 /** Unknown syntax. */ | |
45 GPBFileSyntaxUnknown = 0, | 43 GPBFileSyntaxUnknown = 0, |
46 /** Proto2 syntax. */ | |
47 GPBFileSyntaxProto2 = 2, | 44 GPBFileSyntaxProto2 = 2, |
48 /** Proto3 syntax. */ | |
49 GPBFileSyntaxProto3 = 3, | 45 GPBFileSyntaxProto3 = 3, |
50 }; | 46 }; |
51 | 47 |
52 /** Type of proto field. */ | |
53 typedef NS_ENUM(uint8_t, GPBFieldType) { | 48 typedef NS_ENUM(uint8_t, GPBFieldType) { |
54 /** Optional/required field. Only valid for proto2 fields. */ | 49 GPBFieldTypeSingle, // optional/required |
55 GPBFieldTypeSingle, | 50 GPBFieldTypeRepeated, // repeated |
56 /** Repeated field. */ | 51 GPBFieldTypeMap, // map<K,V> |
57 GPBFieldTypeRepeated, | |
58 /** Map field. */ | |
59 GPBFieldTypeMap, | |
60 }; | 52 }; |
61 | 53 |
62 /** | |
63 * Describes a proto message. | |
64 **/ | |
65 @interface GPBDescriptor : NSObject<NSCopying> | 54 @interface GPBDescriptor : NSObject<NSCopying> |
66 | 55 |
67 /** Name of the message. */ | |
68 @property(nonatomic, readonly, copy) NSString *name; | 56 @property(nonatomic, readonly, copy) NSString *name; |
69 /** Fields declared in the message. */ | |
70 @property(nonatomic, readonly, strong, nullable) NSArray<GPBFieldDescriptor*> *f
ields; | 57 @property(nonatomic, readonly, strong, nullable) NSArray<GPBFieldDescriptor*> *f
ields; |
71 /** Oneofs declared in the message. */ | |
72 @property(nonatomic, readonly, strong, nullable) NSArray<GPBOneofDescriptor*> *o
neofs; | 58 @property(nonatomic, readonly, strong, nullable) NSArray<GPBOneofDescriptor*> *o
neofs; |
73 /** Extension range declared for the message. */ | |
74 @property(nonatomic, readonly, nullable) const GPBExtensionRange *extensionRange
s; | 59 @property(nonatomic, readonly, nullable) const GPBExtensionRange *extensionRange
s; |
75 /** Number of extension ranges declared for the message. */ | |
76 @property(nonatomic, readonly) uint32_t extensionRangesCount; | 60 @property(nonatomic, readonly) uint32_t extensionRangesCount; |
77 /** Descriptor for the file where the message was defined. */ | |
78 @property(nonatomic, readonly, assign) GPBFileDescriptor *file; | 61 @property(nonatomic, readonly, assign) GPBFileDescriptor *file; |
79 | 62 |
80 /** Whether the message is in wire format or not. */ | |
81 @property(nonatomic, readonly, getter=isWireFormat) BOOL wireFormat; | 63 @property(nonatomic, readonly, getter=isWireFormat) BOOL wireFormat; |
82 /** The class of this message. */ | |
83 @property(nonatomic, readonly) Class messageClass; | 64 @property(nonatomic, readonly) Class messageClass; |
84 /** Containing message descriptor if this message is nested, or nil otherwise. *
/ | |
85 @property(readonly, nullable) GPBDescriptor *containingType; | |
86 /** | |
87 * Fully qualified name for this message (package.message). Can be nil if the | |
88 * value is unable to be computed. | |
89 */ | |
90 @property(readonly, nullable) NSString *fullName; | |
91 | 65 |
92 /** | |
93 * Gets the field for the given number. | |
94 * | |
95 * @param fieldNumber The number for the field to get. | |
96 * | |
97 * @return The field descriptor for the given number, or nil if not found. | |
98 **/ | |
99 - (nullable GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber; | 66 - (nullable GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber; |
100 | |
101 /** | |
102 * Gets the field for the given name. | |
103 * | |
104 * @param name The name for the field to get. | |
105 * | |
106 * @return The field descriptor for the given name, or nil if not found. | |
107 **/ | |
108 - (nullable GPBFieldDescriptor *)fieldWithName:(NSString *)name; | 67 - (nullable GPBFieldDescriptor *)fieldWithName:(NSString *)name; |
109 | |
110 /** | |
111 * Gets the oneof for the given name. | |
112 * | |
113 * @param name The name for the oneof to get. | |
114 * | |
115 * @return The oneof descriptor for the given name, or nil if not found. | |
116 **/ | |
117 - (nullable GPBOneofDescriptor *)oneofWithName:(NSString *)name; | 68 - (nullable GPBOneofDescriptor *)oneofWithName:(NSString *)name; |
118 | 69 |
119 @end | 70 @end |
120 | 71 |
121 /** | |
122 * Describes a proto file. | |
123 **/ | |
124 @interface GPBFileDescriptor : NSObject | 72 @interface GPBFileDescriptor : NSObject |
125 | 73 |
126 /** The package declared in the proto file. */ | |
127 @property(nonatomic, readonly, copy) NSString *package; | 74 @property(nonatomic, readonly, copy) NSString *package; |
128 /** The objc prefix declared in the proto file. */ | |
129 @property(nonatomic, readonly, copy, nullable) NSString *objcPrefix; | |
130 /** The syntax of the proto file. */ | |
131 @property(nonatomic, readonly) GPBFileSyntax syntax; | 75 @property(nonatomic, readonly) GPBFileSyntax syntax; |
132 | 76 |
133 @end | 77 @end |
134 | 78 |
135 /** | |
136 * Describes a oneof field. | |
137 **/ | |
138 @interface GPBOneofDescriptor : NSObject | 79 @interface GPBOneofDescriptor : NSObject |
139 /** Name of the oneof field. */ | |
140 @property(nonatomic, readonly) NSString *name; | 80 @property(nonatomic, readonly) NSString *name; |
141 /** Fields declared in the oneof. */ | |
142 @property(nonatomic, readonly) NSArray<GPBFieldDescriptor*> *fields; | 81 @property(nonatomic, readonly) NSArray<GPBFieldDescriptor*> *fields; |
143 | 82 |
144 /** | |
145 * Gets the field for the given number. | |
146 * | |
147 * @param fieldNumber The number for the field to get. | |
148 * | |
149 * @return The field descriptor for the given number, or nil if not found. | |
150 **/ | |
151 - (nullable GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber; | 83 - (nullable GPBFieldDescriptor *)fieldWithNumber:(uint32_t)fieldNumber; |
152 | |
153 /** | |
154 * Gets the field for the given name. | |
155 * | |
156 * @param name The name for the field to get. | |
157 * | |
158 * @return The field descriptor for the given name, or nil if not found. | |
159 **/ | |
160 - (nullable GPBFieldDescriptor *)fieldWithName:(NSString *)name; | 84 - (nullable GPBFieldDescriptor *)fieldWithName:(NSString *)name; |
161 | |
162 @end | 85 @end |
163 | 86 |
164 /** | |
165 * Describes a proto field. | |
166 **/ | |
167 @interface GPBFieldDescriptor : NSObject | 87 @interface GPBFieldDescriptor : NSObject |
168 | 88 |
169 /** Name of the field. */ | |
170 @property(nonatomic, readonly, copy) NSString *name; | 89 @property(nonatomic, readonly, copy) NSString *name; |
171 /** Number associated with the field. */ | |
172 @property(nonatomic, readonly) uint32_t number; | 90 @property(nonatomic, readonly) uint32_t number; |
173 /** Data type contained in the field. */ | |
174 @property(nonatomic, readonly) GPBDataType dataType; | 91 @property(nonatomic, readonly) GPBDataType dataType; |
175 /** Whether it has a default value or not. */ | |
176 @property(nonatomic, readonly) BOOL hasDefaultValue; | 92 @property(nonatomic, readonly) BOOL hasDefaultValue; |
177 /** Default value for the field. */ | |
178 @property(nonatomic, readonly) GPBGenericValue defaultValue; | 93 @property(nonatomic, readonly) GPBGenericValue defaultValue; |
179 /** Whether this field is required. Only valid for proto2 fields. */ | |
180 @property(nonatomic, readonly, getter=isRequired) BOOL required; | 94 @property(nonatomic, readonly, getter=isRequired) BOOL required; |
181 /** Whether this field is optional. */ | |
182 @property(nonatomic, readonly, getter=isOptional) BOOL optional; | 95 @property(nonatomic, readonly, getter=isOptional) BOOL optional; |
183 /** Type of field (single, repeated, map). */ | |
184 @property(nonatomic, readonly) GPBFieldType fieldType; | 96 @property(nonatomic, readonly) GPBFieldType fieldType; |
185 /** Type of the key if the field is a map. The value's type is -fieldType. */ | 97 // If it is a map, the value type is in -type. |
186 @property(nonatomic, readonly) GPBDataType mapKeyDataType; | 98 @property(nonatomic, readonly) GPBDataType mapKeyDataType; |
187 /** Whether the field is packable. */ | |
188 @property(nonatomic, readonly, getter=isPackable) BOOL packable; | 99 @property(nonatomic, readonly, getter=isPackable) BOOL packable; |
189 | 100 |
190 /** The containing oneof if this field is part of one, nil otherwise. */ | |
191 @property(nonatomic, readonly, assign, nullable) GPBOneofDescriptor *containingO
neof; | 101 @property(nonatomic, readonly, assign, nullable) GPBOneofDescriptor *containingO
neof; |
192 | 102 |
193 /** Class of the message if the field is of message type. */ | 103 // Message properties |
194 @property(nonatomic, readonly, assign, nullable) Class msgClass; | 104 @property(nonatomic, readonly, assign, nullable) Class msgClass; |
195 | 105 |
196 /** Descriptor for the enum if this field is an enum. */ | 106 // Enum properties |
197 @property(nonatomic, readonly, strong, nullable) GPBEnumDescriptor *enumDescript
or; | 107 @property(nonatomic, readonly, strong, nullable) GPBEnumDescriptor *enumDescript
or; |
198 | 108 |
199 /** | |
200 * Checks whether the given enum raw value is a valid enum value. | |
201 * | |
202 * @param value The raw enum value to check. | |
203 * | |
204 * @return YES if value is a valid enum raw value. | |
205 **/ | |
206 - (BOOL)isValidEnumValue:(int32_t)value; | 109 - (BOOL)isValidEnumValue:(int32_t)value; |
207 | 110 |
208 /** @return Name for the text format, or nil if not known. */ | 111 // For now, this will return nil if it doesn't know the name to use for |
| 112 // TextFormat. |
209 - (nullable NSString *)textFormatName; | 113 - (nullable NSString *)textFormatName; |
210 | 114 |
211 @end | 115 @end |
212 | 116 |
213 /** | |
214 * Describes a proto enum. | |
215 **/ | |
216 @interface GPBEnumDescriptor : NSObject | 117 @interface GPBEnumDescriptor : NSObject |
217 | 118 |
218 /** Name of the enum. */ | |
219 @property(nonatomic, readonly, copy) NSString *name; | 119 @property(nonatomic, readonly, copy) NSString *name; |
220 /** Function that validates that raw values are valid enum values. */ | |
221 @property(nonatomic, readonly) GPBEnumValidationFunc enumVerifier; | 120 @property(nonatomic, readonly) GPBEnumValidationFunc enumVerifier; |
222 | 121 |
223 /** | |
224 * Returns the enum value name for the given raw enum. | |
225 * | |
226 * @param number The raw enum value. | |
227 * | |
228 * @return The name of the enum value passed, or nil if not valid. | |
229 **/ | |
230 - (nullable NSString *)enumNameForValue:(int32_t)number; | 122 - (nullable NSString *)enumNameForValue:(int32_t)number; |
231 | |
232 /** | |
233 * Gets the enum raw value for the given enum name. | |
234 * | |
235 * @param outValue A pointer where the value will be set. | |
236 * @param name The enum name for which to get the raw value. | |
237 * | |
238 * @return YES if a value was copied into the pointer, NO otherwise. | |
239 **/ | |
240 - (BOOL)getValue:(nullable int32_t *)outValue forEnumName:(NSString *)name; | 123 - (BOOL)getValue:(nullable int32_t *)outValue forEnumName:(NSString *)name; |
241 | 124 |
242 /** | |
243 * Returns the text format for the given raw enum value. | |
244 * | |
245 * @param number The raw enum value. | |
246 * | |
247 * @return The text format name for the raw enum value, or nil if not valid. | |
248 **/ | |
249 - (nullable NSString *)textFormatNameForValue:(int32_t)number; | 125 - (nullable NSString *)textFormatNameForValue:(int32_t)number; |
250 | 126 |
251 /** | |
252 * Gets the enum raw value for the given text format name. | |
253 * | |
254 * @param outValue A pointer where the value will be set. | |
255 * @param textFormatName The text format name for which to get the raw value. | |
256 * | |
257 * @return YES if a value was copied into the pointer, NO otherwise. | |
258 **/ | |
259 - (BOOL)getValue:(nullable int32_t *)outValue forEnumTextFormatName:(NSString *)
textFormatName; | |
260 | |
261 @end | 127 @end |
262 | 128 |
263 /** | |
264 * Describes a proto extension. | |
265 **/ | |
266 @interface GPBExtensionDescriptor : NSObject<NSCopying> | 129 @interface GPBExtensionDescriptor : NSObject<NSCopying> |
267 /** Field number under which the extension is stored. */ | |
268 @property(nonatomic, readonly) uint32_t fieldNumber; | 130 @property(nonatomic, readonly) uint32_t fieldNumber; |
269 /** The containing message class, i.e. the class extended by this extension. */ | |
270 @property(nonatomic, readonly) Class containingMessageClass; | 131 @property(nonatomic, readonly) Class containingMessageClass; |
271 /** Data type contained in the extension. */ | |
272 @property(nonatomic, readonly) GPBDataType dataType; | 132 @property(nonatomic, readonly) GPBDataType dataType; |
273 /** Whether the extension is repeated. */ | |
274 @property(nonatomic, readonly, getter=isRepeated) BOOL repeated; | 133 @property(nonatomic, readonly, getter=isRepeated) BOOL repeated; |
275 /** Whether the extension is packable. */ | |
276 @property(nonatomic, readonly, getter=isPackable) BOOL packable; | 134 @property(nonatomic, readonly, getter=isPackable) BOOL packable; |
277 /** The class of the message if the extension is of message type. */ | |
278 @property(nonatomic, readonly, assign) Class msgClass; | 135 @property(nonatomic, readonly, assign) Class msgClass; |
279 /** The singleton name for the extension. */ | |
280 @property(nonatomic, readonly) NSString *singletonName; | 136 @property(nonatomic, readonly) NSString *singletonName; |
281 /** The enum descriptor if the extension is of enum type. */ | |
282 @property(nonatomic, readonly, strong, nullable) GPBEnumDescriptor *enumDescript
or; | 137 @property(nonatomic, readonly, strong, nullable) GPBEnumDescriptor *enumDescript
or; |
283 /** The default value for the extension. */ | 138 @property(nonatomic, readonly) id defaultValue; |
284 @property(nonatomic, readonly, nullable) id defaultValue; | |
285 | |
286 @end | 139 @end |
287 | 140 |
288 NS_ASSUME_NONNULL_END | 141 NS_ASSUME_NONNULL_END |
OLD | NEW |