google-cloud-datastore-v1 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,459 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2023 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Api
22
+ # Specifies the routing information that should be sent along with the request
23
+ # in the form of routing header.
24
+ # **NOTE:** All service configuration rules follow the "last one wins" order.
25
+ #
26
+ # The examples below will apply to an RPC which has the following request type:
27
+ #
28
+ # Message Definition:
29
+ #
30
+ # message Request {
31
+ # // The name of the Table
32
+ # // Values can be of the following formats:
33
+ # // - `projects/<project>/tables/<table>`
34
+ # // - `projects/<project>/instances/<instance>/tables/<table>`
35
+ # // - `region/<region>/zones/<zone>/tables/<table>`
36
+ # string table_name = 1;
37
+ #
38
+ # // This value specifies routing for replication.
39
+ # // It can be in the following formats:
40
+ # // - `profiles/<profile_id>`
41
+ # // - a legacy `profile_id` that can be any string
42
+ # string app_profile_id = 2;
43
+ # }
44
+ #
45
+ # Example message:
46
+ #
47
+ # {
48
+ # table_name: projects/proj_foo/instances/instance_bar/table/table_baz,
49
+ # app_profile_id: profiles/prof_qux
50
+ # }
51
+ #
52
+ # The routing header consists of one or multiple key-value pairs. Every key
53
+ # and value must be percent-encoded, and joined together in the format of
54
+ # `key1=value1&key2=value2`.
55
+ # In the examples below I am skipping the percent-encoding for readablity.
56
+ #
57
+ # Example 1
58
+ #
59
+ # Extracting a field from the request to put into the routing header
60
+ # unchanged, with the key equal to the field name.
61
+ #
62
+ # annotation:
63
+ #
64
+ # option (google.api.routing) = {
65
+ # // Take the `app_profile_id`.
66
+ # routing_parameters {
67
+ # field: "app_profile_id"
68
+ # }
69
+ # };
70
+ #
71
+ # result:
72
+ #
73
+ # x-goog-request-params: app_profile_id=profiles/prof_qux
74
+ #
75
+ # Example 2
76
+ #
77
+ # Extracting a field from the request to put into the routing header
78
+ # unchanged, with the key different from the field name.
79
+ #
80
+ # annotation:
81
+ #
82
+ # option (google.api.routing) = {
83
+ # // Take the `app_profile_id`, but name it `routing_id` in the header.
84
+ # routing_parameters {
85
+ # field: "app_profile_id"
86
+ # path_template: "{routing_id=**}"
87
+ # }
88
+ # };
89
+ #
90
+ # result:
91
+ #
92
+ # x-goog-request-params: routing_id=profiles/prof_qux
93
+ #
94
+ # Example 3
95
+ #
96
+ # Extracting a field from the request to put into the routing
97
+ # header, while matching a path template syntax on the field's value.
98
+ #
99
+ # NB: it is more useful to send nothing than to send garbage for the purpose
100
+ # of dynamic routing, since garbage pollutes cache. Thus the matching.
101
+ #
102
+ # Sub-example 3a
103
+ #
104
+ # The field matches the template.
105
+ #
106
+ # annotation:
107
+ #
108
+ # option (google.api.routing) = {
109
+ # // Take the `table_name`, if it's well-formed (with project-based
110
+ # // syntax).
111
+ # routing_parameters {
112
+ # field: "table_name"
113
+ # path_template: "{table_name=projects/*/instances/*/**}"
114
+ # }
115
+ # };
116
+ #
117
+ # result:
118
+ #
119
+ # x-goog-request-params:
120
+ # table_name=projects/proj_foo/instances/instance_bar/table/table_baz
121
+ #
122
+ # Sub-example 3b
123
+ #
124
+ # The field does not match the template.
125
+ #
126
+ # annotation:
127
+ #
128
+ # option (google.api.routing) = {
129
+ # // Take the `table_name`, if it's well-formed (with region-based
130
+ # // syntax).
131
+ # routing_parameters {
132
+ # field: "table_name"
133
+ # path_template: "{table_name=regions/*/zones/*/**}"
134
+ # }
135
+ # };
136
+ #
137
+ # result:
138
+ #
139
+ # <no routing header will be sent>
140
+ #
141
+ # Sub-example 3c
142
+ #
143
+ # Multiple alternative conflictingly named path templates are
144
+ # specified. The one that matches is used to construct the header.
145
+ #
146
+ # annotation:
147
+ #
148
+ # option (google.api.routing) = {
149
+ # // Take the `table_name`, if it's well-formed, whether
150
+ # // using the region- or projects-based syntax.
151
+ #
152
+ # routing_parameters {
153
+ # field: "table_name"
154
+ # path_template: "{table_name=regions/*/zones/*/**}"
155
+ # }
156
+ # routing_parameters {
157
+ # field: "table_name"
158
+ # path_template: "{table_name=projects/*/instances/*/**}"
159
+ # }
160
+ # };
161
+ #
162
+ # result:
163
+ #
164
+ # x-goog-request-params:
165
+ # table_name=projects/proj_foo/instances/instance_bar/table/table_baz
166
+ #
167
+ # Example 4
168
+ #
169
+ # Extracting a single routing header key-value pair by matching a
170
+ # template syntax on (a part of) a single request field.
171
+ #
172
+ # annotation:
173
+ #
174
+ # option (google.api.routing) = {
175
+ # // Take just the project id from the `table_name` field.
176
+ # routing_parameters {
177
+ # field: "table_name"
178
+ # path_template: "{routing_id=projects/*}/**"
179
+ # }
180
+ # };
181
+ #
182
+ # result:
183
+ #
184
+ # x-goog-request-params: routing_id=projects/proj_foo
185
+ #
186
+ # Example 5
187
+ #
188
+ # Extracting a single routing header key-value pair by matching
189
+ # several conflictingly named path templates on (parts of) a single request
190
+ # field. The last template to match "wins" the conflict.
191
+ #
192
+ # annotation:
193
+ #
194
+ # option (google.api.routing) = {
195
+ # // If the `table_name` does not have instances information,
196
+ # // take just the project id for routing.
197
+ # // Otherwise take project + instance.
198
+ #
199
+ # routing_parameters {
200
+ # field: "table_name"
201
+ # path_template: "{routing_id=projects/*}/**"
202
+ # }
203
+ # routing_parameters {
204
+ # field: "table_name"
205
+ # path_template: "{routing_id=projects/*/instances/*}/**"
206
+ # }
207
+ # };
208
+ #
209
+ # result:
210
+ #
211
+ # x-goog-request-params:
212
+ # routing_id=projects/proj_foo/instances/instance_bar
213
+ #
214
+ # Example 6
215
+ #
216
+ # Extracting multiple routing header key-value pairs by matching
217
+ # several non-conflicting path templates on (parts of) a single request field.
218
+ #
219
+ # Sub-example 6a
220
+ #
221
+ # Make the templates strict, so that if the `table_name` does not
222
+ # have an instance information, nothing is sent.
223
+ #
224
+ # annotation:
225
+ #
226
+ # option (google.api.routing) = {
227
+ # // The routing code needs two keys instead of one composite
228
+ # // but works only for the tables with the "project-instance" name
229
+ # // syntax.
230
+ #
231
+ # routing_parameters {
232
+ # field: "table_name"
233
+ # path_template: "{project_id=projects/*}/instances/*/**"
234
+ # }
235
+ # routing_parameters {
236
+ # field: "table_name"
237
+ # path_template: "projects/*/{instance_id=instances/*}/**"
238
+ # }
239
+ # };
240
+ #
241
+ # result:
242
+ #
243
+ # x-goog-request-params:
244
+ # project_id=projects/proj_foo&instance_id=instances/instance_bar
245
+ #
246
+ # Sub-example 6b
247
+ #
248
+ # Make the templates loose, so that if the `table_name` does not
249
+ # have an instance information, just the project id part is sent.
250
+ #
251
+ # annotation:
252
+ #
253
+ # option (google.api.routing) = {
254
+ # // The routing code wants two keys instead of one composite
255
+ # // but will work with just the `project_id` for tables without
256
+ # // an instance in the `table_name`.
257
+ #
258
+ # routing_parameters {
259
+ # field: "table_name"
260
+ # path_template: "{project_id=projects/*}/**"
261
+ # }
262
+ # routing_parameters {
263
+ # field: "table_name"
264
+ # path_template: "projects/*/{instance_id=instances/*}/**"
265
+ # }
266
+ # };
267
+ #
268
+ # result (is the same as 6a for our example message because it has the instance
269
+ # information):
270
+ #
271
+ # x-goog-request-params:
272
+ # project_id=projects/proj_foo&instance_id=instances/instance_bar
273
+ #
274
+ # Example 7
275
+ #
276
+ # Extracting multiple routing header key-value pairs by matching
277
+ # several path templates on multiple request fields.
278
+ #
279
+ # NB: note that here there is no way to specify sending nothing if one of the
280
+ # fields does not match its template. E.g. if the `table_name` is in the wrong
281
+ # format, the `project_id` will not be sent, but the `routing_id` will be.
282
+ # The backend routing code has to be aware of that and be prepared to not
283
+ # receive a full complement of keys if it expects multiple.
284
+ #
285
+ # annotation:
286
+ #
287
+ # option (google.api.routing) = {
288
+ # // The routing needs both `project_id` and `routing_id`
289
+ # // (from the `app_profile_id` field) for routing.
290
+ #
291
+ # routing_parameters {
292
+ # field: "table_name"
293
+ # path_template: "{project_id=projects/*}/**"
294
+ # }
295
+ # routing_parameters {
296
+ # field: "app_profile_id"
297
+ # path_template: "{routing_id=**}"
298
+ # }
299
+ # };
300
+ #
301
+ # result:
302
+ #
303
+ # x-goog-request-params:
304
+ # project_id=projects/proj_foo&routing_id=profiles/prof_qux
305
+ #
306
+ # Example 8
307
+ #
308
+ # Extracting a single routing header key-value pair by matching
309
+ # several conflictingly named path templates on several request fields. The
310
+ # last template to match "wins" the conflict.
311
+ #
312
+ # annotation:
313
+ #
314
+ # option (google.api.routing) = {
315
+ # // The `routing_id` can be a project id or a region id depending on
316
+ # // the table name format, but only if the `app_profile_id` is not set.
317
+ # // If `app_profile_id` is set it should be used instead.
318
+ #
319
+ # routing_parameters {
320
+ # field: "table_name"
321
+ # path_template: "{routing_id=projects/*}/**"
322
+ # }
323
+ # routing_parameters {
324
+ # field: "table_name"
325
+ # path_template: "{routing_id=regions/*}/**"
326
+ # }
327
+ # routing_parameters {
328
+ # field: "app_profile_id"
329
+ # path_template: "{routing_id=**}"
330
+ # }
331
+ # };
332
+ #
333
+ # result:
334
+ #
335
+ # x-goog-request-params: routing_id=profiles/prof_qux
336
+ #
337
+ # Example 9
338
+ #
339
+ # Bringing it all together.
340
+ #
341
+ # annotation:
342
+ #
343
+ # option (google.api.routing) = {
344
+ # // For routing both `table_location` and a `routing_id` are needed.
345
+ # //
346
+ # // table_location can be either an instance id or a region+zone id.
347
+ # //
348
+ # // For `routing_id`, take the value of `app_profile_id`
349
+ # // - If it's in the format `profiles/<profile_id>`, send
350
+ # // just the `<profile_id>` part.
351
+ # // - If it's any other literal, send it as is.
352
+ # // If the `app_profile_id` is empty, and the `table_name` starts with
353
+ # // the project_id, send that instead.
354
+ #
355
+ # routing_parameters {
356
+ # field: "table_name"
357
+ # path_template: "projects/*/{table_location=instances/*}/tables/*"
358
+ # }
359
+ # routing_parameters {
360
+ # field: "table_name"
361
+ # path_template: "{table_location=regions/*/zones/*}/tables/*"
362
+ # }
363
+ # routing_parameters {
364
+ # field: "table_name"
365
+ # path_template: "{routing_id=projects/*}/**"
366
+ # }
367
+ # routing_parameters {
368
+ # field: "app_profile_id"
369
+ # path_template: "{routing_id=**}"
370
+ # }
371
+ # routing_parameters {
372
+ # field: "app_profile_id"
373
+ # path_template: "profiles/{routing_id=*}"
374
+ # }
375
+ # };
376
+ #
377
+ # result:
378
+ #
379
+ # x-goog-request-params:
380
+ # table_location=instances/instance_bar&routing_id=prof_qux
381
+ # @!attribute [rw] routing_parameters
382
+ # @return [::Array<::Google::Api::RoutingParameter>]
383
+ # A collection of Routing Parameter specifications.
384
+ # **NOTE:** If multiple Routing Parameters describe the same key
385
+ # (via the `path_template` field or via the `field` field when
386
+ # `path_template` is not provided), "last one wins" rule
387
+ # determines which Parameter gets used.
388
+ # See the examples for more details.
389
+ class RoutingRule
390
+ include ::Google::Protobuf::MessageExts
391
+ extend ::Google::Protobuf::MessageExts::ClassMethods
392
+ end
393
+
394
+ # A projection from an input message to the GRPC or REST header.
395
+ # @!attribute [rw] field
396
+ # @return [::String]
397
+ # A request field to extract the header key-value pair from.
398
+ # @!attribute [rw] path_template
399
+ # @return [::String]
400
+ # A pattern matching the key-value field. Optional.
401
+ # If not specified, the whole field specified in the `field` field will be
402
+ # taken as value, and its name used as key. If specified, it MUST contain
403
+ # exactly one named segment (along with any number of unnamed segments) The
404
+ # pattern will be matched over the field specified in the `field` field, then
405
+ # if the match is successful:
406
+ # - the name of the single named segment will be used as a header name,
407
+ # - the match value of the segment will be used as a header value;
408
+ # if the match is NOT successful, nothing will be sent.
409
+ #
410
+ # Example:
411
+ #
412
+ # -- This is a field in the request message
413
+ # | that the header value will be extracted from.
414
+ # |
415
+ # | -- This is the key name in the
416
+ # | | routing header.
417
+ # V |
418
+ # field: "table_name" v
419
+ # path_template: "projects/*/{table_location=instances/*}/tables/*"
420
+ # ^ ^
421
+ # | |
422
+ # In the {} brackets is the pattern that -- |
423
+ # specifies what to extract from the |
424
+ # field as a value to be sent. |
425
+ # |
426
+ # The string in the field must match the whole pattern --
427
+ # before brackets, inside brackets, after brackets.
428
+ #
429
+ # When looking at this specific example, we can see that:
430
+ # - A key-value pair with the key `table_location`
431
+ # and the value matching `instances/*` should be added
432
+ # to the x-goog-request-params routing header.
433
+ # - The value is extracted from the request message's `table_name` field
434
+ # if it matches the full pattern specified:
435
+ # `projects/*/instances/*/tables/*`.
436
+ #
437
+ # **NB:** If the `path_template` field is not provided, the key name is
438
+ # equal to the field name, and the whole field should be sent as a value.
439
+ # This makes the pattern for the field and the value functionally equivalent
440
+ # to `**`, and the configuration
441
+ #
442
+ # {
443
+ # field: "table_name"
444
+ # }
445
+ #
446
+ # is a functionally equivalent shorthand to:
447
+ #
448
+ # {
449
+ # field: "table_name"
450
+ # path_template: "{table_name=**}"
451
+ # }
452
+ #
453
+ # See Example 1 for more details.
454
+ class RoutingParameter
455
+ include ::Google::Protobuf::MessageExts
456
+ extend ::Google::Protobuf::MessageExts::ClassMethods
457
+ end
458
+ end
459
+ end
@@ -96,7 +96,8 @@ module Google
96
96
  extend ::Google::Protobuf::MessageExts::ClassMethods
97
97
  end
98
98
 
99
- # The response for {::Google::Cloud::Datastore::V1::Datastore::Client#run_query Datastore.RunQuery}.
99
+ # The response for
100
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#run_query Datastore.RunQuery}.
100
101
  # @!attribute [rw] batch
101
102
  # @return [::Google::Cloud::Datastore::V1::QueryResultBatch]
102
103
  # A batch of query results (always present).
@@ -108,7 +109,8 @@ module Google
108
109
  extend ::Google::Protobuf::MessageExts::ClassMethods
109
110
  end
110
111
 
111
- # The request for {::Google::Cloud::Datastore::V1::Datastore::Client#run_aggregation_query Datastore.RunAggregationQuery}.
112
+ # The request for
113
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#run_aggregation_query Datastore.RunAggregationQuery}.
112
114
  # @!attribute [rw] project_id
113
115
  # @return [::String]
114
116
  # Required. The ID of the project against which to make the request.
@@ -138,7 +140,8 @@ module Google
138
140
  extend ::Google::Protobuf::MessageExts::ClassMethods
139
141
  end
140
142
 
141
- # The response for {::Google::Cloud::Datastore::V1::Datastore::Client#run_aggregation_query Datastore.RunAggregationQuery}.
143
+ # The response for
144
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#run_aggregation_query Datastore.RunAggregationQuery}.
142
145
  # @!attribute [rw] batch
143
146
  # @return [::Google::Cloud::Datastore::V1::AggregationResultBatch]
144
147
  # A batch of aggregation results. Always present.
@@ -150,7 +153,8 @@ module Google
150
153
  extend ::Google::Protobuf::MessageExts::ClassMethods
151
154
  end
152
155
 
153
- # The request for {::Google::Cloud::Datastore::V1::Datastore::Client#begin_transaction Datastore.BeginTransaction}.
156
+ # The request for
157
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#begin_transaction Datastore.BeginTransaction}.
154
158
  # @!attribute [rw] project_id
155
159
  # @return [::String]
156
160
  # Required. The ID of the project against which to make the request.
@@ -168,7 +172,8 @@ module Google
168
172
  extend ::Google::Protobuf::MessageExts::ClassMethods
169
173
  end
170
174
 
171
- # The response for {::Google::Cloud::Datastore::V1::Datastore::Client#begin_transaction Datastore.BeginTransaction}.
175
+ # The response for
176
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#begin_transaction Datastore.BeginTransaction}.
172
177
  # @!attribute [rw] transaction
173
178
  # @return [::String]
174
179
  # The transaction identifier (always present).
@@ -196,8 +201,9 @@ module Google
196
201
  extend ::Google::Protobuf::MessageExts::ClassMethods
197
202
  end
198
203
 
199
- # The response for {::Google::Cloud::Datastore::V1::Datastore::Client#rollback Datastore.Rollback}.
200
- # (an empty message).
204
+ # The response for
205
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#rollback Datastore.Rollback}. (an empty
206
+ # message).
201
207
  class RollbackResponse
202
208
  include ::Google::Protobuf::MessageExts
203
209
  extend ::Google::Protobuf::MessageExts::ClassMethods
@@ -272,7 +278,8 @@ module Google
272
278
  extend ::Google::Protobuf::MessageExts::ClassMethods
273
279
  end
274
280
 
275
- # The request for {::Google::Cloud::Datastore::V1::Datastore::Client#allocate_ids Datastore.AllocateIds}.
281
+ # The request for
282
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#allocate_ids Datastore.AllocateIds}.
276
283
  # @!attribute [rw] project_id
277
284
  # @return [::String]
278
285
  # Required. The ID of the project against which to make the request.
@@ -284,14 +291,15 @@ module Google
284
291
  # database.
285
292
  # @!attribute [rw] keys
286
293
  # @return [::Array<::Google::Cloud::Datastore::V1::Key>]
287
- # Required. A list of keys with incomplete key paths for which to allocate IDs.
288
- # No key may be reserved/read-only.
294
+ # Required. A list of keys with incomplete key paths for which to allocate
295
+ # IDs. No key may be reserved/read-only.
289
296
  class AllocateIdsRequest
290
297
  include ::Google::Protobuf::MessageExts
291
298
  extend ::Google::Protobuf::MessageExts::ClassMethods
292
299
  end
293
300
 
294
- # The response for {::Google::Cloud::Datastore::V1::Datastore::Client#allocate_ids Datastore.AllocateIds}.
301
+ # The response for
302
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#allocate_ids Datastore.AllocateIds}.
295
303
  # @!attribute [rw] keys
296
304
  # @return [::Array<::Google::Cloud::Datastore::V1::Key>]
297
305
  # The keys specified in the request (in the same order), each with
@@ -301,7 +309,8 @@ module Google
301
309
  extend ::Google::Protobuf::MessageExts::ClassMethods
302
310
  end
303
311
 
304
- # The request for {::Google::Cloud::Datastore::V1::Datastore::Client#reserve_ids Datastore.ReserveIds}.
312
+ # The request for
313
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#reserve_ids Datastore.ReserveIds}.
305
314
  # @!attribute [rw] project_id
306
315
  # @return [::String]
307
316
  # Required. The ID of the project against which to make the request.
@@ -313,14 +322,15 @@ module Google
313
322
  # database.
314
323
  # @!attribute [rw] keys
315
324
  # @return [::Array<::Google::Cloud::Datastore::V1::Key>]
316
- # Required. A list of keys with complete key paths whose numeric IDs should not be
317
- # auto-allocated.
325
+ # Required. A list of keys with complete key paths whose numeric IDs should
326
+ # not be auto-allocated.
318
327
  class ReserveIdsRequest
319
328
  include ::Google::Protobuf::MessageExts
320
329
  extend ::Google::Protobuf::MessageExts::ClassMethods
321
330
  end
322
331
 
323
- # The response for {::Google::Cloud::Datastore::V1::Datastore::Client#reserve_ids Datastore.ReserveIds}.
332
+ # The response for
333
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#reserve_ids Datastore.ReserveIds}.
324
334
  class ReserveIdsResponse
325
335
  include ::Google::Protobuf::MessageExts
326
336
  extend ::Google::Protobuf::MessageExts::ClassMethods
@@ -419,8 +429,10 @@ module Google
419
429
  # Options for beginning a new transaction.
420
430
  #
421
431
  # Transactions can be created explicitly with calls to
422
- # {::Google::Cloud::Datastore::V1::Datastore::Client#begin_transaction Datastore.BeginTransaction} or implicitly by setting
423
- # [ReadOptions.new_transaction][google.datastore.v1.ReadOptions.new_transaction] in read requests.
432
+ # {::Google::Cloud::Datastore::V1::Datastore::Client#begin_transaction Datastore.BeginTransaction}
433
+ # or implicitly by setting
434
+ # [ReadOptions.new_transaction][google.datastore.v1.ReadOptions.new_transaction]
435
+ # in read requests.
424
436
  # @!attribute [rw] read_write
425
437
  # @return [::Google::Cloud::Datastore::V1::TransactionOptions::ReadWrite]
426
438
  # The transaction should allow both reads and writes.
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2022 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Protobuf
22
+ # A Duration represents a signed, fixed-length span of time represented
23
+ # as a count of seconds and fractions of seconds at nanosecond
24
+ # resolution. It is independent of any calendar and concepts like "day"
25
+ # or "month". It is related to Timestamp in that the difference between
26
+ # two Timestamp values is a Duration and it can be added or subtracted
27
+ # from a Timestamp. Range is approximately +-10,000 years.
28
+ #
29
+ # # Examples
30
+ #
31
+ # Example 1: Compute Duration from two Timestamps in pseudo code.
32
+ #
33
+ # Timestamp start = ...;
34
+ # Timestamp end = ...;
35
+ # Duration duration = ...;
36
+ #
37
+ # duration.seconds = end.seconds - start.seconds;
38
+ # duration.nanos = end.nanos - start.nanos;
39
+ #
40
+ # if (duration.seconds < 0 && duration.nanos > 0) {
41
+ # duration.seconds += 1;
42
+ # duration.nanos -= 1000000000;
43
+ # } else if (duration.seconds > 0 && duration.nanos < 0) {
44
+ # duration.seconds -= 1;
45
+ # duration.nanos += 1000000000;
46
+ # }
47
+ #
48
+ # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
49
+ #
50
+ # Timestamp start = ...;
51
+ # Duration duration = ...;
52
+ # Timestamp end = ...;
53
+ #
54
+ # end.seconds = start.seconds + duration.seconds;
55
+ # end.nanos = start.nanos + duration.nanos;
56
+ #
57
+ # if (end.nanos < 0) {
58
+ # end.seconds -= 1;
59
+ # end.nanos += 1000000000;
60
+ # } else if (end.nanos >= 1000000000) {
61
+ # end.seconds += 1;
62
+ # end.nanos -= 1000000000;
63
+ # }
64
+ #
65
+ # Example 3: Compute Duration from datetime.timedelta in Python.
66
+ #
67
+ # td = datetime.timedelta(days=3, minutes=10)
68
+ # duration = Duration()
69
+ # duration.FromTimedelta(td)
70
+ #
71
+ # # JSON Mapping
72
+ #
73
+ # In JSON format, the Duration type is encoded as a string rather than an
74
+ # object, where the string ends in the suffix "s" (indicating seconds) and
75
+ # is preceded by the number of seconds, with nanoseconds expressed as
76
+ # fractional seconds. For example, 3 seconds with 0 nanoseconds should be
77
+ # encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
78
+ # be expressed in JSON format as "3.000000001s", and 3 seconds and 1
79
+ # microsecond should be expressed in JSON format as "3.000001s".
80
+ # @!attribute [rw] seconds
81
+ # @return [::Integer]
82
+ # Signed seconds of the span of time. Must be from -315,576,000,000
83
+ # to +315,576,000,000 inclusive. Note: these bounds are computed from:
84
+ # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
85
+ # @!attribute [rw] nanos
86
+ # @return [::Integer]
87
+ # Signed fractions of a second at nanosecond resolution of the span
88
+ # of time. Durations less than one second are represented with a 0
89
+ # `seconds` field and a positive or negative `nanos` field. For durations
90
+ # of one second or more, a non-zero value for the `nanos` field must be
91
+ # of the same sign as the `seconds` field. Must be from -999,999,999
92
+ # to +999,999,999 inclusive.
93
+ class Duration
94
+ include ::Google::Protobuf::MessageExts
95
+ extend ::Google::Protobuf::MessageExts::ClassMethods
96
+ end
97
+ end
98
+ end