xref: /aosp_15_r20/external/protobuf/php/src/Google/Protobuf/FieldMask.php (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker<?php
2*1b3f573fSAndroid Build Coastguard Worker# Generated by the protocol buffer compiler.  DO NOT EDIT!
3*1b3f573fSAndroid Build Coastguard Worker# source: google/protobuf/field_mask.proto
4*1b3f573fSAndroid Build Coastguard Worker
5*1b3f573fSAndroid Build Coastguard Workernamespace Google\Protobuf;
6*1b3f573fSAndroid Build Coastguard Worker
7*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\GPBType;
8*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\RepeatedField;
9*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\GPBUtil;
10*1b3f573fSAndroid Build Coastguard Worker
11*1b3f573fSAndroid Build Coastguard Worker/**
12*1b3f573fSAndroid Build Coastguard Worker * `FieldMask` represents a set of symbolic field paths, for example:
13*1b3f573fSAndroid Build Coastguard Worker *     paths: "f.a"
14*1b3f573fSAndroid Build Coastguard Worker *     paths: "f.b.d"
15*1b3f573fSAndroid Build Coastguard Worker * Here `f` represents a field in some root message, `a` and `b`
16*1b3f573fSAndroid Build Coastguard Worker * fields in the message found in `f`, and `d` a field found in the
17*1b3f573fSAndroid Build Coastguard Worker * message in `f.b`.
18*1b3f573fSAndroid Build Coastguard Worker * Field masks are used to specify a subset of fields that should be
19*1b3f573fSAndroid Build Coastguard Worker * returned by a get operation or modified by an update operation.
20*1b3f573fSAndroid Build Coastguard Worker * Field masks also have a custom JSON encoding (see below).
21*1b3f573fSAndroid Build Coastguard Worker * # Field Masks in Projections
22*1b3f573fSAndroid Build Coastguard Worker * When used in the context of a projection, a response message or
23*1b3f573fSAndroid Build Coastguard Worker * sub-message is filtered by the API to only contain those fields as
24*1b3f573fSAndroid Build Coastguard Worker * specified in the mask. For example, if the mask in the previous
25*1b3f573fSAndroid Build Coastguard Worker * example is applied to a response message as follows:
26*1b3f573fSAndroid Build Coastguard Worker *     f {
27*1b3f573fSAndroid Build Coastguard Worker *       a : 22
28*1b3f573fSAndroid Build Coastguard Worker *       b {
29*1b3f573fSAndroid Build Coastguard Worker *         d : 1
30*1b3f573fSAndroid Build Coastguard Worker *         x : 2
31*1b3f573fSAndroid Build Coastguard Worker *       }
32*1b3f573fSAndroid Build Coastguard Worker *       y : 13
33*1b3f573fSAndroid Build Coastguard Worker *     }
34*1b3f573fSAndroid Build Coastguard Worker *     z: 8
35*1b3f573fSAndroid Build Coastguard Worker * The result will not contain specific values for fields x,y and z
36*1b3f573fSAndroid Build Coastguard Worker * (their value will be set to the default, and omitted in proto text
37*1b3f573fSAndroid Build Coastguard Worker * output):
38*1b3f573fSAndroid Build Coastguard Worker *     f {
39*1b3f573fSAndroid Build Coastguard Worker *       a : 22
40*1b3f573fSAndroid Build Coastguard Worker *       b {
41*1b3f573fSAndroid Build Coastguard Worker *         d : 1
42*1b3f573fSAndroid Build Coastguard Worker *       }
43*1b3f573fSAndroid Build Coastguard Worker *     }
44*1b3f573fSAndroid Build Coastguard Worker * A repeated field is not allowed except at the last position of a
45*1b3f573fSAndroid Build Coastguard Worker * paths string.
46*1b3f573fSAndroid Build Coastguard Worker * If a FieldMask object is not present in a get operation, the
47*1b3f573fSAndroid Build Coastguard Worker * operation applies to all fields (as if a FieldMask of all fields
48*1b3f573fSAndroid Build Coastguard Worker * had been specified).
49*1b3f573fSAndroid Build Coastguard Worker * Note that a field mask does not necessarily apply to the
50*1b3f573fSAndroid Build Coastguard Worker * top-level response message. In case of a REST get operation, the
51*1b3f573fSAndroid Build Coastguard Worker * field mask applies directly to the response, but in case of a REST
52*1b3f573fSAndroid Build Coastguard Worker * list operation, the mask instead applies to each individual message
53*1b3f573fSAndroid Build Coastguard Worker * in the returned resource list. In case of a REST custom method,
54*1b3f573fSAndroid Build Coastguard Worker * other definitions may be used. Where the mask applies will be
55*1b3f573fSAndroid Build Coastguard Worker * clearly documented together with its declaration in the API.  In
56*1b3f573fSAndroid Build Coastguard Worker * any case, the effect on the returned resource/resources is required
57*1b3f573fSAndroid Build Coastguard Worker * behavior for APIs.
58*1b3f573fSAndroid Build Coastguard Worker * # Field Masks in Update Operations
59*1b3f573fSAndroid Build Coastguard Worker * A field mask in update operations specifies which fields of the
60*1b3f573fSAndroid Build Coastguard Worker * targeted resource are going to be updated. The API is required
61*1b3f573fSAndroid Build Coastguard Worker * to only change the values of the fields as specified in the mask
62*1b3f573fSAndroid Build Coastguard Worker * and leave the others untouched. If a resource is passed in to
63*1b3f573fSAndroid Build Coastguard Worker * describe the updated values, the API ignores the values of all
64*1b3f573fSAndroid Build Coastguard Worker * fields not covered by the mask.
65*1b3f573fSAndroid Build Coastguard Worker * If a repeated field is specified for an update operation, new values will
66*1b3f573fSAndroid Build Coastguard Worker * be appended to the existing repeated field in the target resource. Note that
67*1b3f573fSAndroid Build Coastguard Worker * a repeated field is only allowed in the last position of a `paths` string.
68*1b3f573fSAndroid Build Coastguard Worker * If a sub-message is specified in the last position of the field mask for an
69*1b3f573fSAndroid Build Coastguard Worker * update operation, then new value will be merged into the existing sub-message
70*1b3f573fSAndroid Build Coastguard Worker * in the target resource.
71*1b3f573fSAndroid Build Coastguard Worker * For example, given the target message:
72*1b3f573fSAndroid Build Coastguard Worker *     f {
73*1b3f573fSAndroid Build Coastguard Worker *       b {
74*1b3f573fSAndroid Build Coastguard Worker *         d: 1
75*1b3f573fSAndroid Build Coastguard Worker *         x: 2
76*1b3f573fSAndroid Build Coastguard Worker *       }
77*1b3f573fSAndroid Build Coastguard Worker *       c: [1]
78*1b3f573fSAndroid Build Coastguard Worker *     }
79*1b3f573fSAndroid Build Coastguard Worker * And an update message:
80*1b3f573fSAndroid Build Coastguard Worker *     f {
81*1b3f573fSAndroid Build Coastguard Worker *       b {
82*1b3f573fSAndroid Build Coastguard Worker *         d: 10
83*1b3f573fSAndroid Build Coastguard Worker *       }
84*1b3f573fSAndroid Build Coastguard Worker *       c: [2]
85*1b3f573fSAndroid Build Coastguard Worker *     }
86*1b3f573fSAndroid Build Coastguard Worker * then if the field mask is:
87*1b3f573fSAndroid Build Coastguard Worker *  paths: ["f.b", "f.c"]
88*1b3f573fSAndroid Build Coastguard Worker * then the result will be:
89*1b3f573fSAndroid Build Coastguard Worker *     f {
90*1b3f573fSAndroid Build Coastguard Worker *       b {
91*1b3f573fSAndroid Build Coastguard Worker *         d: 10
92*1b3f573fSAndroid Build Coastguard Worker *         x: 2
93*1b3f573fSAndroid Build Coastguard Worker *       }
94*1b3f573fSAndroid Build Coastguard Worker *       c: [1, 2]
95*1b3f573fSAndroid Build Coastguard Worker *     }
96*1b3f573fSAndroid Build Coastguard Worker * An implementation may provide options to override this default behavior for
97*1b3f573fSAndroid Build Coastguard Worker * repeated and message fields.
98*1b3f573fSAndroid Build Coastguard Worker * In order to reset a field's value to the default, the field must
99*1b3f573fSAndroid Build Coastguard Worker * be in the mask and set to the default value in the provided resource.
100*1b3f573fSAndroid Build Coastguard Worker * Hence, in order to reset all fields of a resource, provide a default
101*1b3f573fSAndroid Build Coastguard Worker * instance of the resource and set all fields in the mask, or do
102*1b3f573fSAndroid Build Coastguard Worker * not provide a mask as described below.
103*1b3f573fSAndroid Build Coastguard Worker * If a field mask is not present on update, the operation applies to
104*1b3f573fSAndroid Build Coastguard Worker * all fields (as if a field mask of all fields has been specified).
105*1b3f573fSAndroid Build Coastguard Worker * Note that in the presence of schema evolution, this may mean that
106*1b3f573fSAndroid Build Coastguard Worker * fields the client does not know and has therefore not filled into
107*1b3f573fSAndroid Build Coastguard Worker * the request will be reset to their default. If this is unwanted
108*1b3f573fSAndroid Build Coastguard Worker * behavior, a specific service may require a client to always specify
109*1b3f573fSAndroid Build Coastguard Worker * a field mask, producing an error if not.
110*1b3f573fSAndroid Build Coastguard Worker * As with get operations, the location of the resource which
111*1b3f573fSAndroid Build Coastguard Worker * describes the updated values in the request message depends on the
112*1b3f573fSAndroid Build Coastguard Worker * operation kind. In any case, the effect of the field mask is
113*1b3f573fSAndroid Build Coastguard Worker * required to be honored by the API.
114*1b3f573fSAndroid Build Coastguard Worker * ## Considerations for HTTP REST
115*1b3f573fSAndroid Build Coastguard Worker * The HTTP kind of an update operation which uses a field mask must
116*1b3f573fSAndroid Build Coastguard Worker * be set to PATCH instead of PUT in order to satisfy HTTP semantics
117*1b3f573fSAndroid Build Coastguard Worker * (PUT must only be used for full updates).
118*1b3f573fSAndroid Build Coastguard Worker * # JSON Encoding of Field Masks
119*1b3f573fSAndroid Build Coastguard Worker * In JSON, a field mask is encoded as a single string where paths are
120*1b3f573fSAndroid Build Coastguard Worker * separated by a comma. Fields name in each path are converted
121*1b3f573fSAndroid Build Coastguard Worker * to/from lower-camel naming conventions.
122*1b3f573fSAndroid Build Coastguard Worker * As an example, consider the following message declarations:
123*1b3f573fSAndroid Build Coastguard Worker *     message Profile {
124*1b3f573fSAndroid Build Coastguard Worker *       User user = 1;
125*1b3f573fSAndroid Build Coastguard Worker *       Photo photo = 2;
126*1b3f573fSAndroid Build Coastguard Worker *     }
127*1b3f573fSAndroid Build Coastguard Worker *     message User {
128*1b3f573fSAndroid Build Coastguard Worker *       string display_name = 1;
129*1b3f573fSAndroid Build Coastguard Worker *       string address = 2;
130*1b3f573fSAndroid Build Coastguard Worker *     }
131*1b3f573fSAndroid Build Coastguard Worker * In proto a field mask for `Profile` may look as such:
132*1b3f573fSAndroid Build Coastguard Worker *     mask {
133*1b3f573fSAndroid Build Coastguard Worker *       paths: "user.display_name"
134*1b3f573fSAndroid Build Coastguard Worker *       paths: "photo"
135*1b3f573fSAndroid Build Coastguard Worker *     }
136*1b3f573fSAndroid Build Coastguard Worker * In JSON, the same mask is represented as below:
137*1b3f573fSAndroid Build Coastguard Worker *     {
138*1b3f573fSAndroid Build Coastguard Worker *       mask: "user.displayName,photo"
139*1b3f573fSAndroid Build Coastguard Worker *     }
140*1b3f573fSAndroid Build Coastguard Worker * # Field Masks and Oneof Fields
141*1b3f573fSAndroid Build Coastguard Worker * Field masks treat fields in oneofs just as regular fields. Consider the
142*1b3f573fSAndroid Build Coastguard Worker * following message:
143*1b3f573fSAndroid Build Coastguard Worker *     message SampleMessage {
144*1b3f573fSAndroid Build Coastguard Worker *       oneof test_oneof {
145*1b3f573fSAndroid Build Coastguard Worker *         string name = 4;
146*1b3f573fSAndroid Build Coastguard Worker *         SubMessage sub_message = 9;
147*1b3f573fSAndroid Build Coastguard Worker *       }
148*1b3f573fSAndroid Build Coastguard Worker *     }
149*1b3f573fSAndroid Build Coastguard Worker * The field mask can be:
150*1b3f573fSAndroid Build Coastguard Worker *     mask {
151*1b3f573fSAndroid Build Coastguard Worker *       paths: "name"
152*1b3f573fSAndroid Build Coastguard Worker *     }
153*1b3f573fSAndroid Build Coastguard Worker * Or:
154*1b3f573fSAndroid Build Coastguard Worker *     mask {
155*1b3f573fSAndroid Build Coastguard Worker *       paths: "sub_message"
156*1b3f573fSAndroid Build Coastguard Worker *     }
157*1b3f573fSAndroid Build Coastguard Worker * Note that oneof type names ("test_oneof" in this case) cannot be used in
158*1b3f573fSAndroid Build Coastguard Worker * paths.
159*1b3f573fSAndroid Build Coastguard Worker * ## Field Mask Verification
160*1b3f573fSAndroid Build Coastguard Worker * The implementation of any API method which has a FieldMask type field in the
161*1b3f573fSAndroid Build Coastguard Worker * request should verify the included field paths, and return an
162*1b3f573fSAndroid Build Coastguard Worker * `INVALID_ARGUMENT` error if any path is unmappable.
163*1b3f573fSAndroid Build Coastguard Worker *
164*1b3f573fSAndroid Build Coastguard Worker * Generated from protobuf message <code>google.protobuf.FieldMask</code>
165*1b3f573fSAndroid Build Coastguard Worker */
166*1b3f573fSAndroid Build Coastguard Workerclass FieldMask extends \Google\Protobuf\Internal\Message
167*1b3f573fSAndroid Build Coastguard Worker{
168*1b3f573fSAndroid Build Coastguard Worker    /**
169*1b3f573fSAndroid Build Coastguard Worker     * The set of field mask paths.
170*1b3f573fSAndroid Build Coastguard Worker     *
171*1b3f573fSAndroid Build Coastguard Worker     * Generated from protobuf field <code>repeated string paths = 1;</code>
172*1b3f573fSAndroid Build Coastguard Worker     */
173*1b3f573fSAndroid Build Coastguard Worker    private $paths;
174*1b3f573fSAndroid Build Coastguard Worker
175*1b3f573fSAndroid Build Coastguard Worker    /**
176*1b3f573fSAndroid Build Coastguard Worker     * Constructor.
177*1b3f573fSAndroid Build Coastguard Worker     *
178*1b3f573fSAndroid Build Coastguard Worker     * @param array $data {
179*1b3f573fSAndroid Build Coastguard Worker     *     Optional. Data for populating the Message object.
180*1b3f573fSAndroid Build Coastguard Worker     *
181*1b3f573fSAndroid Build Coastguard Worker     *     @type array<string>|\Google\Protobuf\Internal\RepeatedField $paths
182*1b3f573fSAndroid Build Coastguard Worker     *           The set of field mask paths.
183*1b3f573fSAndroid Build Coastguard Worker     * }
184*1b3f573fSAndroid Build Coastguard Worker     */
185*1b3f573fSAndroid Build Coastguard Worker    public function __construct($data = NULL) {
186*1b3f573fSAndroid Build Coastguard Worker        \GPBMetadata\Google\Protobuf\FieldMask::initOnce();
187*1b3f573fSAndroid Build Coastguard Worker        parent::__construct($data);
188*1b3f573fSAndroid Build Coastguard Worker    }
189*1b3f573fSAndroid Build Coastguard Worker
190*1b3f573fSAndroid Build Coastguard Worker    /**
191*1b3f573fSAndroid Build Coastguard Worker     * The set of field mask paths.
192*1b3f573fSAndroid Build Coastguard Worker     *
193*1b3f573fSAndroid Build Coastguard Worker     * Generated from protobuf field <code>repeated string paths = 1;</code>
194*1b3f573fSAndroid Build Coastguard Worker     * @return \Google\Protobuf\Internal\RepeatedField
195*1b3f573fSAndroid Build Coastguard Worker     */
196*1b3f573fSAndroid Build Coastguard Worker    public function getPaths()
197*1b3f573fSAndroid Build Coastguard Worker    {
198*1b3f573fSAndroid Build Coastguard Worker        return $this->paths;
199*1b3f573fSAndroid Build Coastguard Worker    }
200*1b3f573fSAndroid Build Coastguard Worker
201*1b3f573fSAndroid Build Coastguard Worker    /**
202*1b3f573fSAndroid Build Coastguard Worker     * The set of field mask paths.
203*1b3f573fSAndroid Build Coastguard Worker     *
204*1b3f573fSAndroid Build Coastguard Worker     * Generated from protobuf field <code>repeated string paths = 1;</code>
205*1b3f573fSAndroid Build Coastguard Worker     * @param array<string>|\Google\Protobuf\Internal\RepeatedField $var
206*1b3f573fSAndroid Build Coastguard Worker     * @return $this
207*1b3f573fSAndroid Build Coastguard Worker     */
208*1b3f573fSAndroid Build Coastguard Worker    public function setPaths($var)
209*1b3f573fSAndroid Build Coastguard Worker    {
210*1b3f573fSAndroid Build Coastguard Worker        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
211*1b3f573fSAndroid Build Coastguard Worker        $this->paths = $arr;
212*1b3f573fSAndroid Build Coastguard Worker
213*1b3f573fSAndroid Build Coastguard Worker        return $this;
214*1b3f573fSAndroid Build Coastguard Worker    }
215*1b3f573fSAndroid Build Coastguard Worker
216*1b3f573fSAndroid Build Coastguard Worker}
217*1b3f573fSAndroid Build Coastguard Worker
218