github.com/ngicks/gokugen@v0.0.5/cron/time.go (about) 1 package cron 2 3 import "time" 4 5 // Minute is 0 - 59 uint value. 6 // Value out of this range is invalid and IsValid returns false. 7 type Minute uint 8 9 func (m Minute) IsValid() bool { 10 if m > 59 { 11 return false 12 } 13 return true 14 } 15 16 func (m Minute) Round() Minute { 17 if m > 59 { 18 return 59 19 } 20 return m 21 } 22 23 // Hour is 0 - 23 uint value. 24 // Value out of this range is invalid and IsValid returns false. 25 type Hour uint 26 27 func (h Hour) IsValid() bool { 28 if h > 23 { 29 return false 30 } 31 return true 32 } 33 34 func (h Hour) Round() Hour { 35 if h > 23 { 36 return 23 37 } 38 return h 39 } 40 41 // Day is 1 - 31 uint value. 42 // Value out of this range is invalid and IsValid returns false. 43 type Day uint 44 45 func (d Day) IsValid() bool { 46 if d == 0 { 47 return false 48 } else if d > 31 { 49 return false 50 } 51 return true 52 } 53 54 func (d Day) Round() Day { 55 if d == 0 { 56 return 1 57 } else if d > 31 { 58 return 31 59 } 60 return d 61 } 62 63 type Minutes []Minute 64 65 func (m *Minutes) IsZero() bool { 66 return m == nil || *m == nil || len(*m) == 0 67 } 68 69 func (m *Minutes) Get() []Minute { 70 if m.IsZero() { 71 return m.Default() 72 } 73 sl := make([]Minute, 0) 74 for _, v := range m.Default() { 75 for _, min := range *m { 76 if min == v { 77 sl = append(sl, v) 78 break 79 } 80 } 81 } 82 return sl 83 } 84 85 func (m *Minutes) Default() []Minute { 86 minutes := make([]Minute, 0) 87 for i := 0; i < 60; i++ { 88 minutes = append(minutes, Minute(i)) 89 } 90 return minutes 91 } 92 93 func (m *Minutes) IsValid() bool { 94 // nil = wildcard(*). 95 if m == nil || *m == nil { 96 return true 97 } 98 for _, min := range *m { 99 if !min.IsValid() { 100 return false 101 } 102 } 103 return true 104 } 105 106 type Hours []Hour 107 108 func (h *Hours) IsZero() bool { 109 return h == nil || *h == nil || len(*h) == 0 110 } 111 112 func (h *Hours) Get() []Hour { 113 if h.IsZero() { 114 return h.Default() 115 } 116 sl := make([]Hour, 0) 117 for _, v := range h.Default() { 118 for _, hour := range *h { 119 if hour == v { 120 sl = append(sl, v) 121 break 122 } 123 } 124 } 125 return sl 126 } 127 128 func (h *Hours) Default() []Hour { 129 hours := make([]Hour, 0) 130 for i := 0; i < 24; i++ { 131 hours = append(hours, Hour(i)) 132 } 133 return hours 134 } 135 136 func (h *Hours) IsValid() bool { 137 // nil = wildcard(*). 138 if h == nil || *h == nil { 139 return true 140 } 141 for _, hour := range *h { 142 if !hour.IsValid() { 143 return false 144 } 145 } 146 return true 147 } 148 149 type Days []Day 150 151 func (d *Days) IsZero() bool { 152 return d == nil || *d == nil || len(*d) == 0 153 } 154 func (d *Days) Get() []Day { 155 if d.IsZero() { 156 return d.Default() 157 } 158 sl := make([]Day, 0) 159 for _, v := range d.Default() { 160 for _, dd := range *d { 161 if dd == v { 162 sl = append(sl, v) 163 break 164 } 165 } 166 } 167 return sl 168 } 169 170 func (d *Days) Default() []Day { 171 days := make([]Day, 0) 172 for i := 1; i <= 31; i++ { 173 days = append(days, Day(i)) 174 } 175 return days 176 } 177 178 func (d *Days) IsValid() bool { 179 // nil = wildcard(*). 180 if d == nil || *d == nil { 181 return true 182 } 183 for _, day := range *d { 184 if !day.IsValid() { 185 return false 186 } 187 } 188 return true 189 } 190 191 func isValidMonth(m time.Month) bool { 192 return time.January <= m && m <= time.December 193 } 194 195 func isValidWeekday(w time.Weekday) bool { 196 return w == time.Sunday || 197 w == time.Monday || 198 w == time.Tuesday || 199 w == time.Wednesday || 200 w == time.Thursday || 201 w == time.Friday || 202 w == time.Saturday 203 } 204 205 type Months []time.Month 206 207 func (m *Months) IsZero() bool { 208 return m == nil || *m == nil || len(*m) == 0 209 } 210 211 func (m *Months) Get() []time.Month { 212 if m.IsZero() { 213 return m.Default() 214 } 215 sl := make([]time.Month, 0) 216 for _, v := range m.Default() { 217 for _, mon := range *m { 218 if mon == v { 219 sl = append(sl, v) 220 break 221 } 222 } 223 } 224 return sl 225 } 226 227 func (m *Months) Default() []time.Month { 228 return []time.Month{ 229 time.January, 230 time.February, 231 time.March, 232 time.April, 233 time.May, 234 time.June, 235 time.July, 236 time.August, 237 time.September, 238 time.October, 239 time.November, 240 time.December, 241 } 242 } 243 244 func (m *Months) IsValid() bool { 245 // nil = wildcard(*). 246 if m == nil || *m == nil { 247 return true 248 } 249 for _, month := range *m { 250 if !isValidMonth(month) { 251 return false 252 } 253 } 254 return true 255 } 256 257 type Weekdays []time.Weekday 258 259 func (w *Weekdays) IsZero() bool { 260 return w == nil || *w == nil || len(*w) == 0 261 } 262 263 func (w *Weekdays) Get() []time.Weekday { 264 if w.IsZero() { 265 return w.Default() 266 } 267 268 sl := make([]time.Weekday, 0) 269 for _, v := range w.Default() { 270 for _, wd := range *w { 271 if wd == v { 272 sl = append(sl, v) 273 break 274 } 275 } 276 } 277 return sl 278 } 279 280 func (w *Weekdays) Default() []time.Weekday { 281 return []time.Weekday{ 282 time.Sunday, 283 time.Monday, 284 time.Tuesday, 285 time.Wednesday, 286 time.Thursday, 287 time.Friday, 288 time.Saturday, 289 } 290 } 291 292 func (w *Weekdays) IsValid() bool { 293 // nil = wildcard(*). 294 if w == nil || *w == nil { 295 return true 296 } 297 for _, wd := range *w { 298 if !isValidWeekday(wd) { 299 return false 300 } 301 } 302 return true 303 }