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  }