...

Source file src/github.com/gogo/protobuf/types/duration_gogo.go

Documentation: github.com/gogo/protobuf/types

     1  // Protocol Buffers for Go with Gadgets
     2  //
     3  // Copyright (c) 2016, The GoGo Authors. All rights reserved.
     4  // http://github.com/gogo/protobuf
     5  //
     6  // Redistribution and use in source and binary forms, with or without
     7  // modification, are permitted provided that the following conditions are
     8  // met:
     9  //
    10  //     * Redistributions of source code must retain the above copyright
    11  // notice, this list of conditions and the following disclaimer.
    12  //     * Redistributions in binary form must reproduce the above
    13  // copyright notice, this list of conditions and the following disclaimer
    14  // in the documentation and/or other materials provided with the
    15  // distribution.
    16  //
    17  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    18  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    19  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    20  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    21  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    22  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    23  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    24  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    25  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    26  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    27  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    28  
    29  package types
    30  
    31  import (
    32  	"fmt"
    33  	"time"
    34  )
    35  
    36  func NewPopulatedDuration(r interface {
    37  	Int63() int64
    38  }, easy bool) *Duration {
    39  	this := &Duration{}
    40  	maxSecs := time.Hour.Nanoseconds() / 1e9
    41  	max := 2 * maxSecs
    42  	s := int64(r.Int63()) % max
    43  	s -= maxSecs
    44  	neg := int64(1)
    45  	if s < 0 {
    46  		neg = -1
    47  	}
    48  	this.Seconds = s
    49  	this.Nanos = int32(neg * (r.Int63() % 1e9))
    50  	return this
    51  }
    52  
    53  func (d *Duration) String() string {
    54  	td, err := DurationFromProto(d)
    55  	if err != nil {
    56  		return fmt.Sprintf("(%v)", err)
    57  	}
    58  	return td.String()
    59  }
    60  
    61  func NewPopulatedStdDuration(r interface {
    62  	Int63() int64
    63  }, easy bool) *time.Duration {
    64  	dur := NewPopulatedDuration(r, easy)
    65  	d, err := DurationFromProto(dur)
    66  	if err != nil {
    67  		return nil
    68  	}
    69  	return &d
    70  }
    71  
    72  func SizeOfStdDuration(d time.Duration) int {
    73  	dur := DurationProto(d)
    74  	return dur.Size()
    75  }
    76  
    77  func StdDurationMarshal(d time.Duration) ([]byte, error) {
    78  	size := SizeOfStdDuration(d)
    79  	buf := make([]byte, size)
    80  	_, err := StdDurationMarshalTo(d, buf)
    81  	return buf, err
    82  }
    83  
    84  func StdDurationMarshalTo(d time.Duration, data []byte) (int, error) {
    85  	dur := DurationProto(d)
    86  	return dur.MarshalTo(data)
    87  }
    88  
    89  func StdDurationUnmarshal(d *time.Duration, data []byte) error {
    90  	dur := &Duration{}
    91  	if err := dur.Unmarshal(data); err != nil {
    92  		return err
    93  	}
    94  	dd, err := DurationFromProto(dur)
    95  	if err != nil {
    96  		return err
    97  	}
    98  	*d = dd
    99  	return nil
   100  }
   101  

View as plain text