MCPcopy Create free account
hub / github.com/codnect/chrono / parseField

Function parseField

cron.go:186–257  ·  view source on GitHub ↗
(value string, fieldType fieldType)

Source from the content-addressed store, hash-verified

184}
185
186func parseField(value string, fieldType fieldType) (*cronFieldBits, error) {
187 if len(value) == 0 {
188 return nil, fmt.Errorf("value must not be empty")
189 }
190
191 if fieldType.Field == cronFieldMonth {
192 value = replaceOrdinals(value, months)
193 } else if fieldType.Field == cronFieldDayOfWeek {
194 value = replaceOrdinals(value, days)
195 }
196
197 cronFieldBits := newFieldBits(fieldType)
198
199 fields := strings.Split(value, ",")
200
201 for _, field := range fields {
202 slashPos := strings.Index(field, "/")
203
204 step := -1
205 var valueRange valueRange
206
207 if slashPos != -1 {
208 rangeStr := field[0:slashPos]
209
210 var err error
211 valueRange, err = parseRange(rangeStr, fieldType)
212
213 if err != nil {
214 return nil, err
215 }
216
217 if strings.Index(rangeStr, "-") == -1 {
218 valueRange = newValueRange(valueRange.MinValue, fieldType.MaxValue)
219 }
220
221 stepStr := field[slashPos+1:]
222
223 step, err = strconv.Atoi(stepStr)
224
225 if err != nil {
226 return nil, fmt.Errorf("step must be number : \"%s\"", stepStr)
227 }
228
229 if step <= 0 {
230 return nil, fmt.Errorf("step must be 1 or higher in \"%s\"", value)
231 }
232
233 } else {
234 var err error
235 valueRange, err = parseRange(field, fieldType)
236
237 if err != nil {
238 return nil, err
239 }
240 }
241
242 if step > 1 {
243 for index := valueRange.MinValue; index <= valueRange.MaxValue; index += step {

Callers 2

ParseCronExpressionFunction · 0.85

Calls 4

replaceOrdinalsFunction · 0.85
newFieldBitsFunction · 0.85
parseRangeFunction · 0.85
newValueRangeFunction · 0.85

Tested by 1