@@ -60,8 +60,7 @@ impl<'a> CommandClient<'a> {
6060 }
6161
6262 pub ( crate ) async fn get ( & self , week : Option < String > , year : Option < i32 > , format : Format ) {
63- let week =
64- get_week_with_fallback ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
63+ let week = maybe_parse_week ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
6564
6665 match format {
6766 Format :: Json => self . get_json ( & week) . await . context ( "JSON" ) ,
@@ -86,8 +85,7 @@ impl<'a> CommandClient<'a> {
8685 }
8786
8887 let day = get_days ( days) ;
89- let week =
90- get_week_with_fallback ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
88+ let week = maybe_parse_week ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
9189
9290 self . time_sheet_service
9391 . lock ( )
@@ -115,8 +113,7 @@ impl<'a> CommandClient<'a> {
115113 exit_with_error ! ( "`--day` is set but no day was provided" ) ;
116114 }
117115
118- let week =
119- get_week_with_fallback ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
116+ let week = maybe_parse_week ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
120117 self . time_sheet_service
121118 . lock ( )
122119 . await
@@ -143,8 +140,7 @@ impl<'a> CommandClient<'a> {
143140 week : Option < String > ,
144141 year : Option < i32 > ,
145142 ) {
146- let week =
147- get_week_with_fallback ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
143+ let week = maybe_parse_week ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
148144
149145 self . repository
150146 . lock ( )
@@ -158,8 +154,7 @@ impl<'a> CommandClient<'a> {
158154 }
159155
160156 pub ( crate ) async fn submit ( & mut self , week : Option < String > , year : Option < i32 > ) {
161- let week =
162- get_week_with_fallback ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
157+ let week = maybe_parse_week ( week, year) . unwrap_or_else ( |err| exit_with_error ! ( "{err}" ) ) ;
163158
164159 self . repository
165160 . lock ( )
@@ -180,38 +175,29 @@ fn get_days(days: Option<Days>) -> Days {
180175 } )
181176}
182177
183- // TODO: refactor this so that it lives on WeekNumber and parse_week calls this instead of
184- // vice-versa
185- fn get_week_with_fallback ( week : Option < String > , year : Option < i32 > ) -> anyhow:: Result < WeekNumber > {
186- if let Some ( week) = week {
187- let week = parse_week ( week) ?;
188-
189- let week = WeekNumber :: new_with_fallback ( week, year) ?;
190- Ok ( week)
191- } else {
192- let week = chrono:: Local :: now ( ) . date_naive ( ) . iso_week ( ) . week ( ) ;
193- let week = week
194- . try_into ( )
195- . expect ( "Week numbers are always less than 255" ) ;
196-
197- WeekNumber :: new_with_fallback ( week, year)
198- }
199- }
200-
201- fn parse_week ( week : String ) -> anyhow:: Result < u8 > {
202- let week = match week. trim ( ) . to_lowercase ( ) . as_str ( ) {
178+ fn parse_week_number ( week : String ) -> anyhow:: Result < u8 > {
179+ match week. trim ( ) . to_lowercase ( ) . as_str ( ) {
203180 "previous" => {
181+ // TODO: make sure that the correct year gets set if we do `previous` on week 1
204182 let today_week_last = chrono:: Local :: now ( ) . date_naive ( ) - chrono:: Duration :: weeks ( 1 ) ;
205- let week = today_week_last. iso_week ( ) . week ( ) ;
183+ let week = today_week_last
184+ . iso_week ( )
185+ . week ( )
186+ . try_into ( )
187+ . expect ( "Week numbers are always less than 255" ) ;
188+
206189 info ! ( "Using previous week number: {week}" ) ;
207190 Ok ( week)
208191 }
209192 number => number
210193 . parse ( )
211194 . with_context ( || format ! ( "Invalid week number '{week}'" ) ) ,
212- } ?
213- . try_into ( )
214- . expect ( "Week numbers are always less than 255" ) ;
195+ }
196+ }
197+
198+ fn maybe_parse_week ( week : Option < String > , year : Option < i32 > ) -> anyhow:: Result < WeekNumber > {
199+ let week = week. map ( parse_week_number) . transpose ( ) ?;
200+ let week = WeekNumber :: new_with_fallback ( week, year) ?;
215201
216202 Ok ( week)
217203}
0 commit comments