-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathinterval.go
73 lines (65 loc) · 1.23 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package query
import (
"github.com/pkg/errors"
)
type Interval uint8
const (
IntervalRaw Interval = iota
IntervalHour
IntervalDay
IntervalWeek
IntervalMonth
)
var AllIntervals = []Interval{
IntervalRaw,
IntervalHour,
IntervalDay,
IntervalWeek,
IntervalMonth,
}
func ToInterval(val string) (Interval, error) {
switch val {
case "raw":
return IntervalRaw, nil
case "hour":
return IntervalHour, nil
case "day":
return IntervalDay, nil
case "week":
return IntervalWeek, nil
case "month":
return IntervalMonth, nil
default:
return 0, errors.Errorf("unexpected value: %v", val)
}
}
func FromInterval(val Interval) (string, error) {
switch val {
case IntervalRaw:
return "raw", nil
case IntervalHour:
return "hour", nil
case IntervalDay:
return "day", nil
case IntervalWeek:
return "week", nil
case IntervalMonth:
return "month", nil
default:
return "", errors.Errorf("unexpected value: %v", val)
}
}
func ToIntervalWithFallback(val string, fallback Interval) Interval {
res, err := ToInterval(val)
if err != nil {
return fallback
}
return res
}
func FromIntervalWithFallback(val Interval, fallback string) string {
res, err := FromInterval(val)
if err != nil {
return fallback
}
return res
}