blob: df709a8dd4c2575936a8d53644c2688230d27077 [file] [log] [blame]
khenaidoo5fc5cea2021-08-11 17:39:16 -04001// 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//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050038// # Conversion to a Go Duration
khenaidoo5fc5cea2021-08-11 17:39:16 -040039//
40// The AsDuration method can be used to convert a Duration message to a
41// standard Go time.Duration value:
42//
43// d := dur.AsDuration()
44// ... // make use of d as a time.Duration
45//
46// Converting to a time.Duration is a common operation so that the extensive
47// set of time-based operations provided by the time package can be leveraged.
48// See https://golang.org/pkg/time for more information.
49//
50// The AsDuration method performs the conversion on a best-effort basis.
51// Durations with denormal values (e.g., nanoseconds beyond -99999999 and
52// +99999999, inclusive; or seconds and nanoseconds with opposite signs)
53// are normalized during the conversion to a time.Duration. To manually check for
54// invalid Duration per the documented limitations in duration.proto,
55// additionally call the CheckValid method:
56//
57// if err := dur.CheckValid(); err != nil {
58// ... // handle error
59// }
60//
61// Note that the documented limitations in duration.proto does not protect a
62// Duration from overflowing the representable range of a time.Duration in Go.
63// The AsDuration method uses saturation arithmetic such that an overflow clamps
64// the resulting value to the closest representable value (e.g., math.MaxInt64
65// for positive overflow and math.MinInt64 for negative overflow).
66//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050067// # Conversion from a Go Duration
khenaidoo5fc5cea2021-08-11 17:39:16 -040068//
69// The durationpb.New function can be used to construct a Duration message
70// from a standard Go time.Duration value:
71//
72// dur := durationpb.New(d)
73// ... // make use of d as a *durationpb.Duration
khenaidoo5fc5cea2021-08-11 17:39:16 -040074package durationpb
75
76import (
77 protoreflect "google.golang.org/protobuf/reflect/protoreflect"
78 protoimpl "google.golang.org/protobuf/runtime/protoimpl"
79 math "math"
80 reflect "reflect"
81 sync "sync"
82 time "time"
83)
84
85// A Duration represents a signed, fixed-length span of time represented
86// as a count of seconds and fractions of seconds at nanosecond
87// resolution. It is independent of any calendar and concepts like "day"
88// or "month". It is related to Timestamp in that the difference between
89// two Timestamp values is a Duration and it can be added or subtracted
90// from a Timestamp. Range is approximately +-10,000 years.
91//
92// # Examples
93//
94// Example 1: Compute Duration from two Timestamps in pseudo code.
95//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050096// Timestamp start = ...;
97// Timestamp end = ...;
98// Duration duration = ...;
khenaidoo5fc5cea2021-08-11 17:39:16 -040099//
Joey Armstrongba3d9d12024-01-15 14:22:11 -0500100// duration.seconds = end.seconds - start.seconds;
101// duration.nanos = end.nanos - start.nanos;
khenaidoo5fc5cea2021-08-11 17:39:16 -0400102//
Joey Armstrongba3d9d12024-01-15 14:22:11 -0500103// if (duration.seconds < 0 && duration.nanos > 0) {
104// duration.seconds += 1;
105// duration.nanos -= 1000000000;
106// } else if (duration.seconds > 0 && duration.nanos < 0) {
107// duration.seconds -= 1;
108// duration.nanos += 1000000000;
109// }
khenaidoo5fc5cea2021-08-11 17:39:16 -0400110//
111// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
112//
Joey Armstrongba3d9d12024-01-15 14:22:11 -0500113// Timestamp start = ...;
114// Duration duration = ...;
115// Timestamp end = ...;
khenaidoo5fc5cea2021-08-11 17:39:16 -0400116//
Joey Armstrongba3d9d12024-01-15 14:22:11 -0500117// end.seconds = start.seconds + duration.seconds;
118// end.nanos = start.nanos + duration.nanos;
khenaidoo5fc5cea2021-08-11 17:39:16 -0400119//
Joey Armstrongba3d9d12024-01-15 14:22:11 -0500120// if (end.nanos < 0) {
121// end.seconds -= 1;
122// end.nanos += 1000000000;
123// } else if (end.nanos >= 1000000000) {
124// end.seconds += 1;
125// end.nanos -= 1000000000;
126// }
khenaidoo5fc5cea2021-08-11 17:39:16 -0400127//
128// Example 3: Compute Duration from datetime.timedelta in Python.
129//
Joey Armstrongba3d9d12024-01-15 14:22:11 -0500130// td = datetime.timedelta(days=3, minutes=10)
131// duration = Duration()
132// duration.FromTimedelta(td)
khenaidoo5fc5cea2021-08-11 17:39:16 -0400133//
134// # JSON Mapping
135//
136// In JSON format, the Duration type is encoded as a string rather than an
137// object, where the string ends in the suffix "s" (indicating seconds) and
138// is preceded by the number of seconds, with nanoseconds expressed as
139// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
140// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
141// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
142// microsecond should be expressed in JSON format as "3.000001s".
khenaidoo5fc5cea2021-08-11 17:39:16 -0400143type Duration struct {
144 state protoimpl.MessageState
145 sizeCache protoimpl.SizeCache
146 unknownFields protoimpl.UnknownFields
147
148 // Signed seconds of the span of time. Must be from -315,576,000,000
149 // to +315,576,000,000 inclusive. Note: these bounds are computed from:
150 // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
151 Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
152 // Signed fractions of a second at nanosecond resolution of the span
153 // of time. Durations less than one second are represented with a 0
154 // `seconds` field and a positive or negative `nanos` field. For durations
155 // of one second or more, a non-zero value for the `nanos` field must be
156 // of the same sign as the `seconds` field. Must be from -999,999,999
157 // to +999,999,999 inclusive.
158 Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
159}
160
161// New constructs a new Duration from the provided time.Duration.
162func New(d time.Duration) *Duration {
163 nanos := d.Nanoseconds()
164 secs := nanos / 1e9
165 nanos -= secs * 1e9
166 return &Duration{Seconds: int64(secs), Nanos: int32(nanos)}
167}
168
169// AsDuration converts x to a time.Duration,
170// returning the closest duration value in the event of overflow.
171func (x *Duration) AsDuration() time.Duration {
172 secs := x.GetSeconds()
173 nanos := x.GetNanos()
174 d := time.Duration(secs) * time.Second
175 overflow := d/time.Second != time.Duration(secs)
176 d += time.Duration(nanos) * time.Nanosecond
177 overflow = overflow || (secs < 0 && nanos < 0 && d > 0)
178 overflow = overflow || (secs > 0 && nanos > 0 && d < 0)
179 if overflow {
180 switch {
181 case secs < 0:
182 return time.Duration(math.MinInt64)
183 case secs > 0:
184 return time.Duration(math.MaxInt64)
185 }
186 }
187 return d
188}
189
190// IsValid reports whether the duration is valid.
191// It is equivalent to CheckValid == nil.
192func (x *Duration) IsValid() bool {
193 return x.check() == 0
194}
195
196// CheckValid returns an error if the duration is invalid.
197// In particular, it checks whether the value is within the range of
198// -10000 years to +10000 years inclusive.
199// An error is reported for a nil Duration.
200func (x *Duration) CheckValid() error {
201 switch x.check() {
202 case invalidNil:
203 return protoimpl.X.NewError("invalid nil Duration")
204 case invalidUnderflow:
205 return protoimpl.X.NewError("duration (%v) exceeds -10000 years", x)
206 case invalidOverflow:
207 return protoimpl.X.NewError("duration (%v) exceeds +10000 years", x)
208 case invalidNanosRange:
209 return protoimpl.X.NewError("duration (%v) has out-of-range nanos", x)
210 case invalidNanosSign:
211 return protoimpl.X.NewError("duration (%v) has seconds and nanos with different signs", x)
212 default:
213 return nil
214 }
215}
216
217const (
218 _ = iota
219 invalidNil
220 invalidUnderflow
221 invalidOverflow
222 invalidNanosRange
223 invalidNanosSign
224)
225
226func (x *Duration) check() uint {
227 const absDuration = 315576000000 // 10000yr * 365.25day/yr * 24hr/day * 60min/hr * 60sec/min
228 secs := x.GetSeconds()
229 nanos := x.GetNanos()
230 switch {
231 case x == nil:
232 return invalidNil
233 case secs < -absDuration:
234 return invalidUnderflow
235 case secs > +absDuration:
236 return invalidOverflow
237 case nanos <= -1e9 || nanos >= +1e9:
238 return invalidNanosRange
239 case (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0):
240 return invalidNanosSign
241 default:
242 return 0
243 }
244}
245
246func (x *Duration) Reset() {
247 *x = Duration{}
248 if protoimpl.UnsafeEnabled {
249 mi := &file_google_protobuf_duration_proto_msgTypes[0]
250 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
251 ms.StoreMessageInfo(mi)
252 }
253}
254
255func (x *Duration) String() string {
256 return protoimpl.X.MessageStringOf(x)
257}
258
259func (*Duration) ProtoMessage() {}
260
261func (x *Duration) ProtoReflect() protoreflect.Message {
262 mi := &file_google_protobuf_duration_proto_msgTypes[0]
263 if protoimpl.UnsafeEnabled && x != nil {
264 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
265 if ms.LoadMessageInfo() == nil {
266 ms.StoreMessageInfo(mi)
267 }
268 return ms
269 }
270 return mi.MessageOf(x)
271}
272
273// Deprecated: Use Duration.ProtoReflect.Descriptor instead.
274func (*Duration) Descriptor() ([]byte, []int) {
275 return file_google_protobuf_duration_proto_rawDescGZIP(), []int{0}
276}
277
278func (x *Duration) GetSeconds() int64 {
279 if x != nil {
280 return x.Seconds
281 }
282 return 0
283}
284
285func (x *Duration) GetNanos() int32 {
286 if x != nil {
287 return x.Nanos
288 }
289 return 0
290}
291
292var File_google_protobuf_duration_proto protoreflect.FileDescriptor
293
294var file_google_protobuf_duration_proto_rawDesc = []byte{
295 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
296 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
297 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
298 0x66, 0x22, 0x3a, 0x0a, 0x08, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
299 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
300 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73,
301 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, 0x83, 0x01,
302 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
303 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
304 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
305 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
306 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x64,
307 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47,
308 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74,
309 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79,
310 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
311}
312
313var (
314 file_google_protobuf_duration_proto_rawDescOnce sync.Once
315 file_google_protobuf_duration_proto_rawDescData = file_google_protobuf_duration_proto_rawDesc
316)
317
318func file_google_protobuf_duration_proto_rawDescGZIP() []byte {
319 file_google_protobuf_duration_proto_rawDescOnce.Do(func() {
320 file_google_protobuf_duration_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_duration_proto_rawDescData)
321 })
322 return file_google_protobuf_duration_proto_rawDescData
323}
324
325var file_google_protobuf_duration_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
326var file_google_protobuf_duration_proto_goTypes = []interface{}{
327 (*Duration)(nil), // 0: google.protobuf.Duration
328}
329var file_google_protobuf_duration_proto_depIdxs = []int32{
330 0, // [0:0] is the sub-list for method output_type
331 0, // [0:0] is the sub-list for method input_type
332 0, // [0:0] is the sub-list for extension type_name
333 0, // [0:0] is the sub-list for extension extendee
334 0, // [0:0] is the sub-list for field type_name
335}
336
337func init() { file_google_protobuf_duration_proto_init() }
338func file_google_protobuf_duration_proto_init() {
339 if File_google_protobuf_duration_proto != nil {
340 return
341 }
342 if !protoimpl.UnsafeEnabled {
343 file_google_protobuf_duration_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
344 switch v := v.(*Duration); i {
345 case 0:
346 return &v.state
347 case 1:
348 return &v.sizeCache
349 case 2:
350 return &v.unknownFields
351 default:
352 return nil
353 }
354 }
355 }
356 type x struct{}
357 out := protoimpl.TypeBuilder{
358 File: protoimpl.DescBuilder{
359 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
360 RawDescriptor: file_google_protobuf_duration_proto_rawDesc,
361 NumEnums: 0,
362 NumMessages: 1,
363 NumExtensions: 0,
364 NumServices: 0,
365 },
366 GoTypes: file_google_protobuf_duration_proto_goTypes,
367 DependencyIndexes: file_google_protobuf_duration_proto_depIdxs,
368 MessageInfos: file_google_protobuf_duration_proto_msgTypes,
369 }.Build()
370 File_google_protobuf_duration_proto = out.File
371 file_google_protobuf_duration_proto_rawDesc = nil
372 file_google_protobuf_duration_proto_goTypes = nil
373 file_google_protobuf_duration_proto_depIdxs = nil
374}