@@ -23,14 +23,15 @@ struct Cli {
23
23
command : Commands ,
24
24
#[ clap( short, long, default_value = "skidmarks.ron" ) ]
25
25
database_url : String ,
26
- #[ clap( short, long, default_value = None ) ]
27
- sort_by : Option < String > ,
28
26
}
29
27
30
28
#[ derive( Debug , Subcommand ) ]
31
29
enum Commands {
32
30
#[ command( about = "List all streaks" , long_about = None , short_flag = 'l' ) ]
33
- List ,
31
+ List {
32
+ #[ clap( short, long) ]
33
+ sort_by : Option < String > ,
34
+ } ,
34
35
#[ command( about = "Create a new streak" , long_about = None , short_flag = 'a' ) ]
35
36
Add {
36
37
#[ clap( short, long, value_enum) ]
@@ -200,9 +201,8 @@ pub enum SortByDirection {
200
201
Descending ,
201
202
}
202
203
203
- pub fn get_sort_order ( ) -> Option < ( SortByField , SortByDirection ) > {
204
- let cli = Cli :: parse ( ) ;
205
- let ( sort_field, sort_direction) = match & cli. sort_by {
204
+ pub fn get_sort_order ( sort_by : Option < String > ) -> Option < ( SortByField , SortByDirection ) > {
205
+ let ( sort_field, sort_direction) = match & sort_by {
206
206
Some ( sort) => {
207
207
let direction = match sort. chars ( ) . next ( ) . unwrap ( ) {
208
208
'+' => SortByDirection :: Ascending ,
@@ -252,8 +252,8 @@ pub fn parse() {
252
252
println ! ( "{tada} {response} {}" , streak. task) ;
253
253
}
254
254
} ,
255
- Commands :: List => {
256
- let streak_list = get_all ( db, get_sort_order ( ) ) ;
255
+ Commands :: List { sort_by } => {
256
+ let streak_list = get_all ( db, get_sort_order ( sort_by . clone ( ) ) ) ;
257
257
println ! ( "{}" , build_table( streak_list) ) ;
258
258
}
259
259
Commands :: Get { ident } => {
@@ -360,9 +360,9 @@ mod tests {
360
360
temp. path( ) . display( ) ,
361
361
"test-sort-order.ron"
362
362
) )
363
- . arg ( "list" )
364
363
. arg ( "--sort-by" )
365
364
. arg ( "+name" )
365
+ . arg ( "list" )
366
366
. assert ( ) ;
367
367
list_assert. success ( ) ;
368
368
}
0 commit comments