-
Notifications
You must be signed in to change notification settings - Fork 6
/
validators.go
132 lines (105 loc) · 2.12 KB
/
validators.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package rrule
import "time"
// validFunc is a kind of function that checks if a time is valid against a rule. It returns true if the time is valid.
// A pointer is accepted in order to avoid the memory copy of the entire time structure. Nil is never considered valid.
type validFunc func(t *time.Time) bool
func alwaysValid(t *time.Time) bool {
return t != nil
}
func validSecond(seconds []int) validFunc {
if len(seconds) == 0 {
return alwaysValid
}
m := intmap(seconds)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[t.Second()]
}
}
func validMinute(minutes []int) validFunc {
if len(minutes) == 0 {
return alwaysValid
}
m := intmap(minutes)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[t.Minute()]
}
}
func validHour(hours []int) validFunc {
if len(hours) == 0 {
return alwaysValid
}
m := intmap(hours)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[t.Hour()]
}
}
// validWeekday ignores the N modifier of QualifiedWeekday
func validWeekday(weekdays []QualifiedWeekday) validFunc {
if len(weekdays) == 0 {
return alwaysValid
}
m := weekdaymap(weekdays)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[t.Weekday()]
}
}
func validMonthDay(monthdays []int) validFunc {
if len(monthdays) == 0 {
return alwaysValid
}
m := intmap(monthdays)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[t.Day()]
}
}
func validWeek(weeks []int) validFunc {
if len(weeks) == 0 {
return alwaysValid
}
m := intmap(weeks)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[1+t.YearDay()/7]
}
}
func validMonth(months []time.Month) validFunc {
if len(months) == 0 {
return alwaysValid
}
m := monthmap(months)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[t.Month()]
}
}
func validYearDay(yeardays []int) validFunc {
if len(yeardays) == 0 {
return alwaysValid
}
m := intmap(yeardays)
return func(t *time.Time) bool {
if t == nil {
return false
}
return m[t.YearDay()]
}
}