@@ -58,10 +58,7 @@ use std::io::Read;
58
58
59
59
#[ tokio:: main]
60
60
async fn main ( ) -> Result < ( ) , Box < dyn Error > > {
61
- run_cli ( Command :: new ( "cli" ) ) . await
62
- }
63
- async fn run_cli ( cmd : Command < ' _ > ) -> Result < ( ) , Box < dyn Error > > {
64
- let cmd = cmd
61
+ let cmd = Command :: new ( "cli" )
65
62
. bin_name ( "cli" )
66
63
. version ( "1.0" )
67
64
. about ( "CLI to manage tasks" )
@@ -125,7 +122,8 @@ async fn run_cli(cmd: Command<'_>) -> Result<(), Box<dyn Error>> {
125
122
task_file. to_string ( )
126
123
} ,
127
124
} ;
128
- let testask: TesTask = serde_json:: from_str ( & task_json) . expect ( "JSON was not well-formatted" ) ;
125
+ let testask: TesTask = serde_json:: from_str ( & task_json)
126
+ . map_err ( |e| format ! ( "Failed to parse JSON: {}" , e) ) ?;
129
127
let mut config = load_configuration ( ) ;
130
128
if config. base_path == "localhost" {
131
129
let funnel_url = ensure_funnel_running ( ) . await ;
@@ -146,23 +144,24 @@ async fn run_cli(cmd: Command<'_>) -> Result<(), Box<dyn Error>> {
146
144
let params = sub. value_of ( "params" ) . unwrap ( ) . to_string ( ) ;
147
145
148
146
// Split the params string into key-value pairs and collect into a HashMap for easier access
149
- let params_map: HashMap < & str , & str > = params. split ( ',' )
147
+ let params_map: HashMap < String , String > = params
148
+ . split ( ',' )
150
149
. filter_map ( |s| {
151
150
let mut parts = s. trim ( ) . splitn ( 2 , ':' ) ;
152
- parts . next ( ) . and_then ( |key| parts. next ( ) . map ( |value| ( key . trim ( ) , value . trim ( ) ) ) )
151
+ Some ( ( parts. next ( ) ? . to_string ( ) , parts . next ( ) ? . to_string ( ) ) )
153
152
} )
154
153
. collect ( ) ;
155
154
println ! ( "parameters are: {:?}" , params_map) ;
156
155
157
156
// Now, construct ListTasksParams from the parsed values
158
157
let parameters = ListTasksParams {
159
- name_prefix : params_map. get ( "name_prefix" ) . and_then ( |& s| if s == "None" { None } else { Some ( s. to_string ( ) ) } ) ,
160
- state : params_map. get ( "state" ) . and_then ( |& s| if s == "None" { None } else { Some ( serde_json:: from_str ( s) . expect ( "Invalid state" ) ) } ) ,
158
+ name_prefix : params_map. get ( "name_prefix" ) . and_then ( |s| if s == "None" { None } else { Some ( s. to_string ( ) ) } ) ,
159
+ state : params_map. get ( "state" ) . and_then ( |s| if s == "None" { None } else { Some ( serde_json:: from_str ( s) . expect ( "Invalid state" ) ) } ) ,
161
160
tag_key : None , // Example does not cover parsing Vec<String>
162
161
tag_value : None , // Example does not cover parsing Vec<String>
163
- page_size : params_map. get ( "page_size" ) . and_then ( |& s| if s == "None" { None } else { Some ( s. parse ( ) . expect ( "Invalid page_size" ) ) } ) ,
164
- page_token : params_map. get ( "page_token" ) . and_then ( |& s| if s == "None" { None } else { Some ( s. to_string ( ) ) } ) ,
165
- view : params_map. get ( "view" ) . and_then ( |& s| if s == "None" { None } else { Some ( s. to_string ( ) ) } ) ,
162
+ page_size : params_map. get ( "page_size" ) . and_then ( |s| if s == "None" { None } else { Some ( s. parse ( ) . expect ( "Invalid page_size" ) ) } ) ,
163
+ page_token : params_map. get ( "page_token" ) . and_then ( |s| if s == "None" { None } else { Some ( s. to_string ( ) ) } ) ,
164
+ view : params_map. get ( "view" ) . and_then ( |s| if s == "None" { None } else { Some ( s. to_string ( ) ) } ) ,
166
165
} ;
167
166
println ! ( "parameters are: {:?}" , parameters) ;
168
167
let mut config = load_configuration ( ) ;
@@ -244,7 +243,10 @@ async fn run_cli(cmd: Command<'_>) -> Result<(), Box<dyn Error>> {
244
243
}
245
244
}
246
245
247
- _ => { println ! ( "TODO" ) ; }
246
+ _ => {
247
+ eprintln ! ( "Error: Unrecognized command or option" ) ;
248
+ std:: process:: exit ( 1 ) ;
249
+ }
248
250
}
249
251
Ok ( ( ) )
250
252
}
0 commit comments