forked from vitessio/vitess
-
Notifications
You must be signed in to change notification settings - Fork 1
/
interval.go
50 lines (43 loc) · 1.43 KB
/
interval.go
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package vttime
import (
"fmt"
"time"
)
// Interval describes a time interval
type Interval struct {
earliest time.Time
latest time.Time
}
// NewInterval creates a new Interval from the provided times.
// earliest has to be smaller or equal to latest, or an error is returned.
func NewInterval(earliest, latest time.Time) (Interval, error) {
if latest.Sub(earliest) < 0 {
return Interval{}, fmt.Errorf("NewInterval: earliest has to be smaller or equal to latest, but got: earliest=%v latest=%v", earliest, latest)
}
return Interval{
earliest: earliest,
latest: latest,
}, nil
}
// Earliest returns the earliest time in the interval. If Interval was
// from calling Now(), it is guaranteed the real time was greater or
// equal than Earliest().
func (i Interval) Earliest() time.Time {
return i.earliest
}
// Latest returns the latest time in the interval. If Interval was
// from calling Now(), it is guaranteed the real time was lesser or
// equal than Latest().
func (i Interval) Latest() time.Time {
return i.latest
}
// Less returns true if the provided interval is earlier than the parameter.
// Since both intervals are inclusive, comparison has to be strict.
func (i Interval) Less(other Interval) bool {
return i.latest.Sub(other.earliest) < 0
}
// IsValid returns true iff latest >= earliest, meaning the interval
// is actually a real valid interval.
func (i Interval) IsValid() bool {
return i.latest.Sub(i.earliest) >= 0
}