...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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