1// 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} 380