@@ -139,13 +139,11 @@ func (p Parser) Parse(spec string) (Schedule, error) {
139139 if err != nil {
140140 return nil , err
141141 }
142- dayNum , weekNumInt , isLastWeek , ok := parseDowInNthWeekFormat (fields [5 ])
143- dayOfWeek := func () uint64 {
144- if ok {
145- return 0
146- }
147- return field (fields [5 ], dow )
148- }()
142+ dowExtra , ok := parseDowInNthWeekFormat (fields [5 ])
143+ var dayOfWeek uint64 = 0
144+ if ! ok {
145+ dayOfWeek = field (fields [5 ], dow )
146+ }
149147 if err != nil {
150148 return nil , err
151149 }
@@ -158,49 +156,45 @@ func (p Parser) Parse(spec string) (Schedule, error) {
158156 Month : month ,
159157 Dow : dayOfWeek ,
160158 Location : loc ,
161- Extra : Extra {
162- DayOfWeek : dayNum ,
163- WeekNumber : weekNumInt ,
164- LastWeek : isLastWeek ,
165- Valid : ok ,
166- },
159+ Extra : dowExtra ,
167160 }, nil
168161}
169162
170163// parseDowInNthWeekFormat parse the dow spec of the cron spec
171- // It returns dayOfTheWeek, occurrence or the week number in month, true if the week number is last week, ok
164+ // It returns the Extra struct that contains
165+ // dayOfTheWeek, occurrence or the week number in month and a boolean for Last Week
172166// For example:
173- // 6#3 => 6, 3, false, true
174- // 6#L => 6, 0, true, true
175- // XYZ => 0, 0, false, false
176- // 8#9 => 0, 0, false, false
177- func parseDowInNthWeekFormat (spec string ) (uint8 , uint8 , bool , bool ) {
167+ // 6#3 => Extra{ 6, 3, false, true}
168+ // 6#L => Extra{ 6, 0, true, true}
169+ // XYZ => Extra{}
170+ // 8#9 => Extra{}
171+ func parseDowInNthWeekFormat (spec string ) (Extra , bool ) {
178172 var dayOfWeek uint8 = 0
179173 var weekNumber uint8 = 0
180174 if len (spec ) != 3 {
181- return 0 , 0 , false , false
175+ return Extra {} , false
182176 }
183177 day := spec [0 :1 ]
184178 if day >= "0" && day <= "6" {
185179 dayOfWeek = day [0 ] - '0'
186180 } else {
187- return 0 , 0 , false , false
181+ return Extra {} , false
188182 }
189183
190184 shebang := spec [1 :2 ]
191185 if shebang != "#" {
192- return 0 , 0 , false , false
186+ return Extra {} , false
193187 }
194188
195189 week := spec [2 :]
196190 if week >= "1" && week <= "4" {
197191 weekNumber = week [0 ] - '0'
198192 } else if week == "L" {
199- return dayOfWeek , 0 , true , true
193+ return Extra { dayOfWeek , 0 , true , true } , true
200194 } else {
201- return 0 , 0 , false , false
195+ return Extra {} , false
202196 }
203- return dayOfWeek , weekNumber , false , true
197+ return Extra { dayOfWeek , weekNumber , false , true } , true
204198}
205199
206200// normalizeFields takes a subset set of the time fields and returns the full set
0 commit comments