@@ -102,6 +102,7 @@ impl Command for ListCommand {
102102 . short ( 'r' )
103103 . long ( "range" )
104104 . num_args ( 2 ..)
105+ . value_parser ( clap:: value_parser!( i32 ) )
105106 . help ( "Filter questions by id range" ) ,
106107 )
107108 . after_help ( LIST_AFTER_HELP )
@@ -148,15 +149,15 @@ impl Command for ListCommand {
148149 #[ cfg( feature = "pym" ) ]
149150 {
150151 if m. contains_id ( "plan" ) {
151- let ids = crate :: pym:: exec ( m. value_of ( "plan" ) . unwrap_or ( "" ) ) ?;
152+ let ids = crate :: pym:: exec ( m. get_one :: < String > ( "plan" ) . unwrap_or ( & "" . to_string ( ) ) ) ?;
152153 crate :: helper:: squash ( & mut ps, ids) ?;
153154 }
154155 }
155156
156157 // filter tag
157158 if m. contains_id ( "tag" ) {
158159 let ids = cache
159- . get_tagged_questions ( m. get_one :: < String > ( "tag" ) . map ( |s| s . as_str ( ) ) . unwrap_or ( "" ) )
160+ . get_tagged_questions ( m. get_one :: < String > ( "tag" ) . unwrap_or ( & "" . to_string ( ) ) )
160161 . await ?;
161162 crate :: helper:: squash ( & mut ps, ids) ?;
162163 }
@@ -165,34 +166,31 @@ impl Command for ListCommand {
165166 if m. contains_id ( "category" ) {
166167 ps. retain ( |x| {
167168 x. category
168- == m . get_one :: < String > ( "category" )
169- . map ( |s| s . as_str ( ) )
170- . unwrap_or ( "algorithms" )
169+ == * m
170+ . get_one :: < String > ( "category" )
171+ . unwrap_or ( & "algorithms" . to_string ( ) )
171172 } ) ;
172173 }
173174
174175 // filter query
175176 if m. contains_id ( "query" ) {
176- let query = m
177- . get_one :: < String > ( "query" )
178- . map ( |s| s. as_str ( ) )
179- . ok_or ( Error :: NoneError ) ?;
177+ let query = m. get_one :: < String > ( "query" ) . ok_or ( Error :: NoneError ) ?;
180178 crate :: helper:: filter ( & mut ps, query. to_string ( ) ) ;
181179 }
182180
183181 // filter range
184182 if m. contains_id ( "range" ) {
185183 let num_range: Vec < i32 > = m
186- . get_many :: < String > ( "range" )
184+ . get_many :: < i32 > ( "range" )
187185 . ok_or ( Error :: NoneError ) ?
186+ . map ( |id| * id)
188187 . into_iter ( )
189- . map ( |x| x. parse :: < i32 > ( ) . unwrap_or ( 0 ) )
190188 . collect ( ) ;
191189 ps. retain ( |x| num_range[ 0 ] <= x. fid && x. fid <= num_range[ 1 ] ) ;
192190 }
193191
194192 // retain if keyword exists
195- if let Some ( keyword) = m. get_one :: < String > ( "keyword" ) . map ( |s| s . as_str ( ) ) {
193+ if let Some ( keyword) = m. get_one :: < String > ( "keyword" ) {
196194 let lowercase_kw = keyword. to_lowercase ( ) ;
197195 ps. retain ( |x| x. name . to_lowercase ( ) . contains ( & lowercase_kw) ) ;
198196 }
0 commit comments