blob: a583ca2f6c7710d0a1658ecd6563be09df7e8278 [file] [log] [blame]
David K. Bainbridgee05cf0c2021-08-19 03:16:50 +00001// Protocol Buffers - Google's data interchange format
2// Copyright 2008 Google Inc. All rights reserved.
3// https://developers.google.com/protocol-buffers/
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright
10// notice, this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above
12// copyright notice, this list of conditions and the following disclaimer
13// in the documentation and/or other materials provided with the
14// distribution.
15// * Neither the name of Google Inc. nor the names of its
16// contributors may be used to endorse or promote products derived from
17// this software without specific prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31// Code generated by protoc-gen-go. DO NOT EDIT.
32// source: google/protobuf/duration.proto
33
34// Package durationpb contains generated types for google/protobuf/duration.proto.
35//
36// The Duration message represents a signed span of time.
37//
38//
39// Conversion to a Go Duration
40//
41// The AsDuration method can be used to convert a Duration message to a
42// standard Go time.Duration value:
43//
44// d := dur.AsDuration()
45// ... // make use of d as a time.Duration
46//
47// Converting to a time.Duration is a common operation so that the extensive
48// set of time-based operations provided by the time package can be leveraged.
49// See https://golang.org/pkg/time for more information.
50//
51// The AsDuration method performs the conversion on a best-effort basis.
52// Durations with denormal values (e.g., nanoseconds beyond -99999999 and
53// +99999999, inclusive; or seconds and nanoseconds with opposite signs)
54// are normalized during the conversion to a time.Duration. To manually check for
55// invalid Duration per the documented limitations in duration.proto,
56// additionally call the CheckValid method:
57//
58// if err := dur.CheckValid(); err != nil {
59// ... // handle error
60// }
61//
62// Note that the documented limitations in duration.proto does not protect a
63// Duration from overflowing the representable range of a time.Duration in Go.
64// The AsDuration method uses saturation arithmetic such that an overflow clamps
65// the resulting value to the closest representable value (e.g., math.MaxInt64
66// for positive overflow and math.MinInt64 for negative overflow).
67//
68//
69// Conversion from a Go Duration
70//
71// The durationpb.New function can be used to construct a Duration message
72// from a standard Go time.Duration value:
73//
74// dur := durationpb.New(d)
75// ... // make use of d as a *durationpb.Duration
76//
77package durationpb
78
79import (
80 protoreflect "google.golang.org/protobuf/reflect/protoreflect"
81 protoimpl "google.golang.org/protobuf/runtime/protoimpl"
82 math "math"
83 reflect "reflect"
84 sync "sync"
85 time "time"
86)
87
88// A Duration represents a signed, fixed-length span of time represented
89// as a count of seconds and fractions of seconds at nanosecond
90// resolution. It is independent of any calendar and concepts like "day"
91// or "month". It is related to Timestamp in that the difference between
92// two Timestamp values is a Duration and it can be added or subtracted
93// from a Timestamp. Range is approximately +-10,000 years.
94//
95// # Examples
96//
97// Example 1: Compute Duration from two Timestamps in pseudo code.
98//
99// Timestamp start = ...;
100// Timestamp end = ...;
101// Duration duration = ...;
102//
103// duration.seconds = end.seconds - start.seconds;
104// duration.nanos = end.nanos - start.nanos;
105//
106// if (duration.seconds < 0 && duration.nanos > 0) {
107// duration.seconds += 1;
108// duration.nanos -= 1000000000;
109// } else if (duration.seconds > 0 && duration.nanos < 0) {
110// duration.seconds -= 1;
111// duration.nanos += 1000000000;
112// }
113//
114// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
115//
116// Timestamp start = ...;
117// Duration duration = ...;
118// Timestamp end = ...;
119//
120// end.seconds = start.seconds + duration.seconds;
121// end.nanos = start.nanos + duration.nanos;
122//
123// if (end.nanos < 0) {
124// end.seconds -= 1;
125// end.nanos += 1000000000;
126// } else if (end.nanos >= 1000000000) {
127// end.seconds += 1;
128// end.nanos -= 1000000000;
129// }
130//
131// Example 3: Compute Duration from datetime.timedelta in Python.
132//
133// td = datetime.timedelta(days=3, minutes=10)
134// duration = Duration()
135// duration.FromTimedelta(td)
136//
137// # JSON Mapping
138//
139// In JSON format, the Duration type is encoded as a string rather than an
140// object, where the string ends in the suffix "s" (indicating seconds) and
141// is preceded by the number of seconds, with nanoseconds expressed as
142// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
143// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
144// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
145// microsecond should be expressed in JSON format as "3.000001s".
146//
147//
148type Duration struct {
149 state protoimpl.MessageState
150 sizeCache protoimpl.SizeCache
151 unknownFields protoimpl.UnknownFields
152
153 // Signed seconds of the span of time. Must be from -315,576,000,000
154 // to +315,576,000,000 inclusive. Note: these bounds are computed from:
155 // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
156 Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
157 // Signed fractions of a second at nanosecond resolution of the span
158 // of time. Durations less than one second are represented with a 0
159 // `seconds` field and a positive or negative `nanos` field. For durations
160 // of one second or more, a non-zero value for the `nanos` field must be
161 // of the same sign as the `seconds` field. Must be from -999,999,999
162 // to +999,999,999 inclusive.
163 Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
164}
165
166// New constructs a new Duration from the provided time.Duration.
167func New(d time.Duration) *Duration {
168 nanos := d.Nanoseconds()
169 secs := nanos / 1e9
170 nanos -= secs * 1e9
171 return &Duration{Seconds: int64(secs), Nanos: int32(nanos)}
172}
173
174// AsDuration converts x to a time.Duration,
175// returning the closest duration value in the event of overflow.
176func (x *Duration) AsDuration() time.Duration {
177 secs := x.GetSeconds()
178 nanos := x.GetNanos()
179 d := time.Duration(secs) * time.Second
180 overflow := d/time.Second != time.Duration(secs)
181 d += time.Duration(nanos) * time.Nanosecond
182 overflow = overflow || (secs < 0 && nanos < 0 && d > 0)
183 overflow = overflow || (secs > 0 && nanos > 0 && d < 0)
184 if overflow {
185 switch {
186 case secs < 0:
187 return time.Duration(math.MinInt64)
188 case secs > 0:
189 return time.Duration(math.MaxInt64)
190 }
191 }
192 return d
193}
194
195// IsValid reports whether the duration is valid.
196// It is equivalent to CheckValid == nil.
197func (x *Duration) IsValid() bool {
198 return x.check() == 0
199}
200
201// CheckValid returns an error if the duration is invalid.
202// In particular, it checks whether the value is within the range of
203// -10000 years to +10000 years inclusive.
204// An error is reported for a nil Duration.
205func (x *Duration) CheckValid() error {
206 switch x.check() {
207 case invalidNil:
208 return protoimpl.X.NewError("invalid nil Duration")
209 case invalidUnderflow:
210 return protoimpl.X.NewError("duration (%v) exceeds -10000 years", x)
211 case invalidOverflow:
212 return protoimpl.X.NewError("duration (%v) exceeds +10000 years", x)
213 case invalidNanosRange:
214 return protoimpl.X.NewError("duration (%v) has out-of-range nanos", x)
215 case invalidNanosSign:
216 return protoimpl.X.NewError("duration (%v) has seconds and nanos with different signs", x)
217 default:
218 return nil
219 }
220}
221
222const (
223 _ = iota
224 invalidNil
225 invalidUnderflow
226 invalidOverflow
227 invalidNanosRange
228 invalidNanosSign
229)
230
231func (x *Duration) check() uint {
232 const absDuration = 315576000000 // 10000yr * 365.25day/yr * 24hr/day * 60min/hr * 60sec/min
233 secs := x.GetSeconds()
234 nanos := x.GetNanos()
235 switch {
236 case x == nil:
237 return invalidNil
238 case secs < -absDuration:
239 return invalidUnderflow
240 case secs > +absDuration:
241 return invalidOverflow
242 case nanos <= -1e9 || nanos >= +1e9:
243 return invalidNanosRange
244 case (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0):
245 return invalidNanosSign
246 default:
247 return 0
248 }
249}
250
251func (x *Duration) Reset() {
252 *x = Duration{}
253 if protoimpl.UnsafeEnabled {
254 mi := &file_google_protobuf_duration_proto_msgTypes[0]
255 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
256 ms.StoreMessageInfo(mi)
257 }
258}
259
260func (x *Duration) String() string {
261 return protoimpl.X.MessageStringOf(x)
262}
263
264func (*Duration) ProtoMessage() {}
265
266func (x *Duration) ProtoReflect() protoreflect.Message {
267 mi := &file_google_protobuf_duration_proto_msgTypes[0]
268 if protoimpl.UnsafeEnabled && x != nil {
269 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
270 if ms.LoadMessageInfo() == nil {
271 ms.StoreMessageInfo(mi)
272 }
273 return ms
274 }
275 return mi.MessageOf(x)
276}
277
278// Deprecated: Use Duration.ProtoReflect.Descriptor instead.
279func (*Duration) Descriptor() ([]byte, []int) {
280 return file_google_protobuf_duration_proto_rawDescGZIP(), []int{0}
281}
282
283func (x *Duration) GetSeconds() int64 {
284 if x != nil {
285 return x.Seconds
286 }
287 return 0
288}
289
290func (x *Duration) GetNanos() int32 {
291 if x != nil {
292 return x.Nanos
293 }
294 return 0
295}
296
297var File_google_protobuf_duration_proto protoreflect.FileDescriptor
298
299var file_google_protobuf_duration_proto_rawDesc = []byte{
300 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
301 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
302 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
303 0x66, 0x22, 0x3a, 0x0a, 0x08, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
304 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
305 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73,
306 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, 0x83, 0x01,
307 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
308 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
309 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
310 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
311 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x64,
312 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47,
313 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74,
314 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79,
315 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
316}
317
318var (
319 file_google_protobuf_duration_proto_rawDescOnce sync.Once
320 file_google_protobuf_duration_proto_rawDescData = file_google_protobuf_duration_proto_rawDesc
321)
322
323func file_google_protobuf_duration_proto_rawDescGZIP() []byte {
324 file_google_protobuf_duration_proto_rawDescOnce.Do(func() {
325 file_google_protobuf_duration_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_duration_proto_rawDescData)
326 })
327 return file_google_protobuf_duration_proto_rawDescData
328}
329
330var file_google_protobuf_duration_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
331var file_google_protobuf_duration_proto_goTypes = []interface{}{
332 (*Duration)(nil), // 0: google.protobuf.Duration
333}
334var file_google_protobuf_duration_proto_depIdxs = []int32{
335 0, // [0:0] is the sub-list for method output_type
336 0, // [0:0] is the sub-list for method input_type
337 0, // [0:0] is the sub-list for extension type_name
338 0, // [0:0] is the sub-list for extension extendee
339 0, // [0:0] is the sub-list for field type_name
340}
341
342func init() { file_google_protobuf_duration_proto_init() }
343func file_google_protobuf_duration_proto_init() {
344 if File_google_protobuf_duration_proto != nil {
345 return
346 }
347 if !protoimpl.UnsafeEnabled {
348 file_google_protobuf_duration_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
349 switch v := v.(*Duration); i {
350 case 0:
351 return &v.state
352 case 1:
353 return &v.sizeCache
354 case 2:
355 return &v.unknownFields
356 default:
357 return nil
358 }
359 }
360 }
361 type x struct{}
362 out := protoimpl.TypeBuilder{
363 File: protoimpl.DescBuilder{
364 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
365 RawDescriptor: file_google_protobuf_duration_proto_rawDesc,
366 NumEnums: 0,
367 NumMessages: 1,
368 NumExtensions: 0,
369 NumServices: 0,
370 },
371 GoTypes: file_google_protobuf_duration_proto_goTypes,
372 DependencyIndexes: file_google_protobuf_duration_proto_depIdxs,
373 MessageInfos: file_google_protobuf_duration_proto_msgTypes,
374 }.Build()
375 File_google_protobuf_duration_proto = out.File
376 file_google_protobuf_duration_proto_rawDesc = nil
377 file_google_protobuf_duration_proto_goTypes = nil
378 file_google_protobuf_duration_proto_depIdxs = nil
379}