Skip to content

Commit 786a855

Browse files
committed
sorcery suggestions
1 parent 768b4cf commit 786a855

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

Diff for: cli/src/main.rs

+15-13
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,7 @@ use std::io::Read;
5858
5959
#[tokio::main]
6060
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")
6562
.bin_name("cli")
6663
.version("1.0")
6764
.about("CLI to manage tasks")
@@ -125,7 +122,8 @@ async fn run_cli(cmd: Command<'_>) -> Result<(), Box<dyn Error>> {
125122
task_file.to_string()
126123
},
127124
};
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))?;
129127
let mut config = load_configuration();
130128
if config.base_path == "localhost" {
131129
let funnel_url = ensure_funnel_running().await;
@@ -146,23 +144,24 @@ async fn run_cli(cmd: Command<'_>) -> Result<(), Box<dyn Error>> {
146144
let params = sub.value_of("params").unwrap().to_string();
147145

148146
// 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(',')
150149
.filter_map(|s| {
151150
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()))
153152
})
154153
.collect();
155154
println!("parameters are: {:?}",params_map);
156155

157156
// Now, construct ListTasksParams from the parsed values
158157
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")) }),
161160
tag_key: None, // Example does not cover parsing Vec<String>
162161
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()) }),
166165
};
167166
println!("parameters are: {:?}",parameters);
168167
let mut config = load_configuration();
@@ -244,7 +243,10 @@ async fn run_cli(cmd: Command<'_>) -> Result<(), Box<dyn Error>> {
244243
}
245244
}
246245

247-
_ => {println!("TODO");}
246+
_ => {
247+
eprintln!("Error: Unrecognized command or option");
248+
std::process::exit(1);
249+
}
248250
}
249251
Ok(())
250252
}

0 commit comments

Comments
 (0)