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