xref: /aosp_15_r20/external/protobuf/objectivec/GPBFieldMask.pbobjc.h (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker // Generated by the protocol buffer compiler.  DO NOT EDIT!
2*1b3f573fSAndroid Build Coastguard Worker // source: google/protobuf/field_mask.proto
3*1b3f573fSAndroid Build Coastguard Worker 
4*1b3f573fSAndroid Build Coastguard Worker #import "GPBDescriptor.h"
5*1b3f573fSAndroid Build Coastguard Worker #import "GPBMessage.h"
6*1b3f573fSAndroid Build Coastguard Worker #import "GPBRootObject.h"
7*1b3f573fSAndroid Build Coastguard Worker 
8*1b3f573fSAndroid Build Coastguard Worker #if GOOGLE_PROTOBUF_OBJC_VERSION < 30004
9*1b3f573fSAndroid Build Coastguard Worker #error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
10*1b3f573fSAndroid Build Coastguard Worker #endif
11*1b3f573fSAndroid Build Coastguard Worker #if 30004 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
12*1b3f573fSAndroid Build Coastguard Worker #error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
13*1b3f573fSAndroid Build Coastguard Worker #endif
14*1b3f573fSAndroid Build Coastguard Worker 
15*1b3f573fSAndroid Build Coastguard Worker // @@protoc_insertion_point(imports)
16*1b3f573fSAndroid Build Coastguard Worker 
17*1b3f573fSAndroid Build Coastguard Worker #pragma clang diagnostic push
18*1b3f573fSAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wdeprecated-declarations"
19*1b3f573fSAndroid Build Coastguard Worker 
20*1b3f573fSAndroid Build Coastguard Worker CF_EXTERN_C_BEGIN
21*1b3f573fSAndroid Build Coastguard Worker 
22*1b3f573fSAndroid Build Coastguard Worker NS_ASSUME_NONNULL_BEGIN
23*1b3f573fSAndroid Build Coastguard Worker 
24*1b3f573fSAndroid Build Coastguard Worker #pragma mark - GPBFieldMaskRoot
25*1b3f573fSAndroid Build Coastguard Worker 
26*1b3f573fSAndroid Build Coastguard Worker /**
27*1b3f573fSAndroid Build Coastguard Worker  * Exposes the extension registry for this file.
28*1b3f573fSAndroid Build Coastguard Worker  *
29*1b3f573fSAndroid Build Coastguard Worker  * The base class provides:
30*1b3f573fSAndroid Build Coastguard Worker  * @code
31*1b3f573fSAndroid Build Coastguard Worker  *   + (GPBExtensionRegistry *)extensionRegistry;
32*1b3f573fSAndroid Build Coastguard Worker  * @endcode
33*1b3f573fSAndroid Build Coastguard Worker  * which is a @c GPBExtensionRegistry that includes all the extensions defined by
34*1b3f573fSAndroid Build Coastguard Worker  * this file and all files that it depends on.
35*1b3f573fSAndroid Build Coastguard Worker  **/
36*1b3f573fSAndroid Build Coastguard Worker GPB_FINAL @interface GPBFieldMaskRoot : GPBRootObject
37*1b3f573fSAndroid Build Coastguard Worker @end
38*1b3f573fSAndroid Build Coastguard Worker 
39*1b3f573fSAndroid Build Coastguard Worker #pragma mark - GPBFieldMask
40*1b3f573fSAndroid Build Coastguard Worker 
41*1b3f573fSAndroid Build Coastguard Worker typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
42*1b3f573fSAndroid Build Coastguard Worker   GPBFieldMask_FieldNumber_PathsArray = 1,
43*1b3f573fSAndroid Build Coastguard Worker };
44*1b3f573fSAndroid Build Coastguard Worker 
45*1b3f573fSAndroid Build Coastguard Worker /**
46*1b3f573fSAndroid Build Coastguard Worker  * `FieldMask` represents a set of symbolic field paths, for example:
47*1b3f573fSAndroid Build Coastguard Worker  *
48*1b3f573fSAndroid Build Coastguard Worker  *     paths: "f.a"
49*1b3f573fSAndroid Build Coastguard Worker  *     paths: "f.b.d"
50*1b3f573fSAndroid Build Coastguard Worker  *
51*1b3f573fSAndroid Build Coastguard Worker  * Here `f` represents a field in some root message, `a` and `b`
52*1b3f573fSAndroid Build Coastguard Worker  * fields in the message found in `f`, and `d` a field found in the
53*1b3f573fSAndroid Build Coastguard Worker  * message in `f.b`.
54*1b3f573fSAndroid Build Coastguard Worker  *
55*1b3f573fSAndroid Build Coastguard Worker  * Field masks are used to specify a subset of fields that should be
56*1b3f573fSAndroid Build Coastguard Worker  * returned by a get operation or modified by an update operation.
57*1b3f573fSAndroid Build Coastguard Worker  * Field masks also have a custom JSON encoding (see below).
58*1b3f573fSAndroid Build Coastguard Worker  *
59*1b3f573fSAndroid Build Coastguard Worker  * # Field Masks in Projections
60*1b3f573fSAndroid Build Coastguard Worker  *
61*1b3f573fSAndroid Build Coastguard Worker  * When used in the context of a projection, a response message or
62*1b3f573fSAndroid Build Coastguard Worker  * sub-message is filtered by the API to only contain those fields as
63*1b3f573fSAndroid Build Coastguard Worker  * specified in the mask. For example, if the mask in the previous
64*1b3f573fSAndroid Build Coastguard Worker  * example is applied to a response message as follows:
65*1b3f573fSAndroid Build Coastguard Worker  *
66*1b3f573fSAndroid Build Coastguard Worker  *     f {
67*1b3f573fSAndroid Build Coastguard Worker  *       a : 22
68*1b3f573fSAndroid Build Coastguard Worker  *       b {
69*1b3f573fSAndroid Build Coastguard Worker  *         d : 1
70*1b3f573fSAndroid Build Coastguard Worker  *         x : 2
71*1b3f573fSAndroid Build Coastguard Worker  *       }
72*1b3f573fSAndroid Build Coastguard Worker  *       y : 13
73*1b3f573fSAndroid Build Coastguard Worker  *     }
74*1b3f573fSAndroid Build Coastguard Worker  *     z: 8
75*1b3f573fSAndroid Build Coastguard Worker  *
76*1b3f573fSAndroid Build Coastguard Worker  * The result will not contain specific values for fields x,y and z
77*1b3f573fSAndroid Build Coastguard Worker  * (their value will be set to the default, and omitted in proto text
78*1b3f573fSAndroid Build Coastguard Worker  * output):
79*1b3f573fSAndroid Build Coastguard Worker  *
80*1b3f573fSAndroid Build Coastguard Worker  *
81*1b3f573fSAndroid Build Coastguard Worker  *     f {
82*1b3f573fSAndroid Build Coastguard Worker  *       a : 22
83*1b3f573fSAndroid Build Coastguard Worker  *       b {
84*1b3f573fSAndroid Build Coastguard Worker  *         d : 1
85*1b3f573fSAndroid Build Coastguard Worker  *       }
86*1b3f573fSAndroid Build Coastguard Worker  *     }
87*1b3f573fSAndroid Build Coastguard Worker  *
88*1b3f573fSAndroid Build Coastguard Worker  * A repeated field is not allowed except at the last position of a
89*1b3f573fSAndroid Build Coastguard Worker  * paths string.
90*1b3f573fSAndroid Build Coastguard Worker  *
91*1b3f573fSAndroid Build Coastguard Worker  * If a FieldMask object is not present in a get operation, the
92*1b3f573fSAndroid Build Coastguard Worker  * operation applies to all fields (as if a FieldMask of all fields
93*1b3f573fSAndroid Build Coastguard Worker  * had been specified).
94*1b3f573fSAndroid Build Coastguard Worker  *
95*1b3f573fSAndroid Build Coastguard Worker  * Note that a field mask does not necessarily apply to the
96*1b3f573fSAndroid Build Coastguard Worker  * top-level response message. In case of a REST get operation, the
97*1b3f573fSAndroid Build Coastguard Worker  * field mask applies directly to the response, but in case of a REST
98*1b3f573fSAndroid Build Coastguard Worker  * list operation, the mask instead applies to each individual message
99*1b3f573fSAndroid Build Coastguard Worker  * in the returned resource list. In case of a REST custom method,
100*1b3f573fSAndroid Build Coastguard Worker  * other definitions may be used. Where the mask applies will be
101*1b3f573fSAndroid Build Coastguard Worker  * clearly documented together with its declaration in the API.  In
102*1b3f573fSAndroid Build Coastguard Worker  * any case, the effect on the returned resource/resources is required
103*1b3f573fSAndroid Build Coastguard Worker  * behavior for APIs.
104*1b3f573fSAndroid Build Coastguard Worker  *
105*1b3f573fSAndroid Build Coastguard Worker  * # Field Masks in Update Operations
106*1b3f573fSAndroid Build Coastguard Worker  *
107*1b3f573fSAndroid Build Coastguard Worker  * A field mask in update operations specifies which fields of the
108*1b3f573fSAndroid Build Coastguard Worker  * targeted resource are going to be updated. The API is required
109*1b3f573fSAndroid Build Coastguard Worker  * to only change the values of the fields as specified in the mask
110*1b3f573fSAndroid Build Coastguard Worker  * and leave the others untouched. If a resource is passed in to
111*1b3f573fSAndroid Build Coastguard Worker  * describe the updated values, the API ignores the values of all
112*1b3f573fSAndroid Build Coastguard Worker  * fields not covered by the mask.
113*1b3f573fSAndroid Build Coastguard Worker  *
114*1b3f573fSAndroid Build Coastguard Worker  * If a repeated field is specified for an update operation, new values will
115*1b3f573fSAndroid Build Coastguard Worker  * be appended to the existing repeated field in the target resource. Note that
116*1b3f573fSAndroid Build Coastguard Worker  * a repeated field is only allowed in the last position of a `paths` string.
117*1b3f573fSAndroid Build Coastguard Worker  *
118*1b3f573fSAndroid Build Coastguard Worker  * If a sub-message is specified in the last position of the field mask for an
119*1b3f573fSAndroid Build Coastguard Worker  * update operation, then new value will be merged into the existing sub-message
120*1b3f573fSAndroid Build Coastguard Worker  * in the target resource.
121*1b3f573fSAndroid Build Coastguard Worker  *
122*1b3f573fSAndroid Build Coastguard Worker  * For example, given the target message:
123*1b3f573fSAndroid Build Coastguard Worker  *
124*1b3f573fSAndroid Build Coastguard Worker  *     f {
125*1b3f573fSAndroid Build Coastguard Worker  *       b {
126*1b3f573fSAndroid Build Coastguard Worker  *         d: 1
127*1b3f573fSAndroid Build Coastguard Worker  *         x: 2
128*1b3f573fSAndroid Build Coastguard Worker  *       }
129*1b3f573fSAndroid Build Coastguard Worker  *       c: [1]
130*1b3f573fSAndroid Build Coastguard Worker  *     }
131*1b3f573fSAndroid Build Coastguard Worker  *
132*1b3f573fSAndroid Build Coastguard Worker  * And an update message:
133*1b3f573fSAndroid Build Coastguard Worker  *
134*1b3f573fSAndroid Build Coastguard Worker  *     f {
135*1b3f573fSAndroid Build Coastguard Worker  *       b {
136*1b3f573fSAndroid Build Coastguard Worker  *         d: 10
137*1b3f573fSAndroid Build Coastguard Worker  *       }
138*1b3f573fSAndroid Build Coastguard Worker  *       c: [2]
139*1b3f573fSAndroid Build Coastguard Worker  *     }
140*1b3f573fSAndroid Build Coastguard Worker  *
141*1b3f573fSAndroid Build Coastguard Worker  * then if the field mask is:
142*1b3f573fSAndroid Build Coastguard Worker  *
143*1b3f573fSAndroid Build Coastguard Worker  *  paths: ["f.b", "f.c"]
144*1b3f573fSAndroid Build Coastguard Worker  *
145*1b3f573fSAndroid Build Coastguard Worker  * then the result will be:
146*1b3f573fSAndroid Build Coastguard Worker  *
147*1b3f573fSAndroid Build Coastguard Worker  *     f {
148*1b3f573fSAndroid Build Coastguard Worker  *       b {
149*1b3f573fSAndroid Build Coastguard Worker  *         d: 10
150*1b3f573fSAndroid Build Coastguard Worker  *         x: 2
151*1b3f573fSAndroid Build Coastguard Worker  *       }
152*1b3f573fSAndroid Build Coastguard Worker  *       c: [1, 2]
153*1b3f573fSAndroid Build Coastguard Worker  *     }
154*1b3f573fSAndroid Build Coastguard Worker  *
155*1b3f573fSAndroid Build Coastguard Worker  * An implementation may provide options to override this default behavior for
156*1b3f573fSAndroid Build Coastguard Worker  * repeated and message fields.
157*1b3f573fSAndroid Build Coastguard Worker  *
158*1b3f573fSAndroid Build Coastguard Worker  * In order to reset a field's value to the default, the field must
159*1b3f573fSAndroid Build Coastguard Worker  * be in the mask and set to the default value in the provided resource.
160*1b3f573fSAndroid Build Coastguard Worker  * Hence, in order to reset all fields of a resource, provide a default
161*1b3f573fSAndroid Build Coastguard Worker  * instance of the resource and set all fields in the mask, or do
162*1b3f573fSAndroid Build Coastguard Worker  * not provide a mask as described below.
163*1b3f573fSAndroid Build Coastguard Worker  *
164*1b3f573fSAndroid Build Coastguard Worker  * If a field mask is not present on update, the operation applies to
165*1b3f573fSAndroid Build Coastguard Worker  * all fields (as if a field mask of all fields has been specified).
166*1b3f573fSAndroid Build Coastguard Worker  * Note that in the presence of schema evolution, this may mean that
167*1b3f573fSAndroid Build Coastguard Worker  * fields the client does not know and has therefore not filled into
168*1b3f573fSAndroid Build Coastguard Worker  * the request will be reset to their default. If this is unwanted
169*1b3f573fSAndroid Build Coastguard Worker  * behavior, a specific service may require a client to always specify
170*1b3f573fSAndroid Build Coastguard Worker  * a field mask, producing an error if not.
171*1b3f573fSAndroid Build Coastguard Worker  *
172*1b3f573fSAndroid Build Coastguard Worker  * As with get operations, the location of the resource which
173*1b3f573fSAndroid Build Coastguard Worker  * describes the updated values in the request message depends on the
174*1b3f573fSAndroid Build Coastguard Worker  * operation kind. In any case, the effect of the field mask is
175*1b3f573fSAndroid Build Coastguard Worker  * required to be honored by the API.
176*1b3f573fSAndroid Build Coastguard Worker  *
177*1b3f573fSAndroid Build Coastguard Worker  * ## Considerations for HTTP REST
178*1b3f573fSAndroid Build Coastguard Worker  *
179*1b3f573fSAndroid Build Coastguard Worker  * The HTTP kind of an update operation which uses a field mask must
180*1b3f573fSAndroid Build Coastguard Worker  * be set to PATCH instead of PUT in order to satisfy HTTP semantics
181*1b3f573fSAndroid Build Coastguard Worker  * (PUT must only be used for full updates).
182*1b3f573fSAndroid Build Coastguard Worker  *
183*1b3f573fSAndroid Build Coastguard Worker  * # JSON Encoding of Field Masks
184*1b3f573fSAndroid Build Coastguard Worker  *
185*1b3f573fSAndroid Build Coastguard Worker  * In JSON, a field mask is encoded as a single string where paths are
186*1b3f573fSAndroid Build Coastguard Worker  * separated by a comma. Fields name in each path are converted
187*1b3f573fSAndroid Build Coastguard Worker  * to/from lower-camel naming conventions.
188*1b3f573fSAndroid Build Coastguard Worker  *
189*1b3f573fSAndroid Build Coastguard Worker  * As an example, consider the following message declarations:
190*1b3f573fSAndroid Build Coastguard Worker  *
191*1b3f573fSAndroid Build Coastguard Worker  *     message Profile {
192*1b3f573fSAndroid Build Coastguard Worker  *       User user = 1;
193*1b3f573fSAndroid Build Coastguard Worker  *       Photo photo = 2;
194*1b3f573fSAndroid Build Coastguard Worker  *     }
195*1b3f573fSAndroid Build Coastguard Worker  *     message User {
196*1b3f573fSAndroid Build Coastguard Worker  *       string display_name = 1;
197*1b3f573fSAndroid Build Coastguard Worker  *       string address = 2;
198*1b3f573fSAndroid Build Coastguard Worker  *     }
199*1b3f573fSAndroid Build Coastguard Worker  *
200*1b3f573fSAndroid Build Coastguard Worker  * In proto a field mask for `Profile` may look as such:
201*1b3f573fSAndroid Build Coastguard Worker  *
202*1b3f573fSAndroid Build Coastguard Worker  *     mask {
203*1b3f573fSAndroid Build Coastguard Worker  *       paths: "user.display_name"
204*1b3f573fSAndroid Build Coastguard Worker  *       paths: "photo"
205*1b3f573fSAndroid Build Coastguard Worker  *     }
206*1b3f573fSAndroid Build Coastguard Worker  *
207*1b3f573fSAndroid Build Coastguard Worker  * In JSON, the same mask is represented as below:
208*1b3f573fSAndroid Build Coastguard Worker  *
209*1b3f573fSAndroid Build Coastguard Worker  *     {
210*1b3f573fSAndroid Build Coastguard Worker  *       mask: "user.displayName,photo"
211*1b3f573fSAndroid Build Coastguard Worker  *     }
212*1b3f573fSAndroid Build Coastguard Worker  *
213*1b3f573fSAndroid Build Coastguard Worker  * # Field Masks and Oneof Fields
214*1b3f573fSAndroid Build Coastguard Worker  *
215*1b3f573fSAndroid Build Coastguard Worker  * Field masks treat fields in oneofs just as regular fields. Consider the
216*1b3f573fSAndroid Build Coastguard Worker  * following message:
217*1b3f573fSAndroid Build Coastguard Worker  *
218*1b3f573fSAndroid Build Coastguard Worker  *     message SampleMessage {
219*1b3f573fSAndroid Build Coastguard Worker  *       oneof test_oneof {
220*1b3f573fSAndroid Build Coastguard Worker  *         string name = 4;
221*1b3f573fSAndroid Build Coastguard Worker  *         SubMessage sub_message = 9;
222*1b3f573fSAndroid Build Coastguard Worker  *       }
223*1b3f573fSAndroid Build Coastguard Worker  *     }
224*1b3f573fSAndroid Build Coastguard Worker  *
225*1b3f573fSAndroid Build Coastguard Worker  * The field mask can be:
226*1b3f573fSAndroid Build Coastguard Worker  *
227*1b3f573fSAndroid Build Coastguard Worker  *     mask {
228*1b3f573fSAndroid Build Coastguard Worker  *       paths: "name"
229*1b3f573fSAndroid Build Coastguard Worker  *     }
230*1b3f573fSAndroid Build Coastguard Worker  *
231*1b3f573fSAndroid Build Coastguard Worker  * Or:
232*1b3f573fSAndroid Build Coastguard Worker  *
233*1b3f573fSAndroid Build Coastguard Worker  *     mask {
234*1b3f573fSAndroid Build Coastguard Worker  *       paths: "sub_message"
235*1b3f573fSAndroid Build Coastguard Worker  *     }
236*1b3f573fSAndroid Build Coastguard Worker  *
237*1b3f573fSAndroid Build Coastguard Worker  * Note that oneof type names ("test_oneof" in this case) cannot be used in
238*1b3f573fSAndroid Build Coastguard Worker  * paths.
239*1b3f573fSAndroid Build Coastguard Worker  *
240*1b3f573fSAndroid Build Coastguard Worker  * ## Field Mask Verification
241*1b3f573fSAndroid Build Coastguard Worker  *
242*1b3f573fSAndroid Build Coastguard Worker  * The implementation of any API method which has a FieldMask type field in the
243*1b3f573fSAndroid Build Coastguard Worker  * request should verify the included field paths, and return an
244*1b3f573fSAndroid Build Coastguard Worker  * `INVALID_ARGUMENT` error if any path is unmappable.
245*1b3f573fSAndroid Build Coastguard Worker  **/
246*1b3f573fSAndroid Build Coastguard Worker GPB_FINAL @interface GPBFieldMask : GPBMessage
247*1b3f573fSAndroid Build Coastguard Worker 
248*1b3f573fSAndroid Build Coastguard Worker /** The set of field mask paths. */
249*1b3f573fSAndroid Build Coastguard Worker @property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *pathsArray;
250*1b3f573fSAndroid Build Coastguard Worker /** The number of items in @c pathsArray without causing the array to be created. */
251*1b3f573fSAndroid Build Coastguard Worker @property(nonatomic, readonly) NSUInteger pathsArray_Count;
252*1b3f573fSAndroid Build Coastguard Worker 
253*1b3f573fSAndroid Build Coastguard Worker @end
254*1b3f573fSAndroid Build Coastguard Worker 
255*1b3f573fSAndroid Build Coastguard Worker NS_ASSUME_NONNULL_END
256*1b3f573fSAndroid Build Coastguard Worker 
257*1b3f573fSAndroid Build Coastguard Worker CF_EXTERN_C_END
258*1b3f573fSAndroid Build Coastguard Worker 
259*1b3f573fSAndroid Build Coastguard Worker #pragma clang diagnostic pop
260*1b3f573fSAndroid Build Coastguard Worker 
261*1b3f573fSAndroid Build Coastguard Worker // @@protoc_insertion_point(global_scope)
262