diff --git a/Cargo.lock b/Cargo.lock index 5ad5951..5bf9e2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1140,7 +1140,7 @@ dependencies = [ [[package]] name = "tensara" -version = "0.3.0" +version = "1.1.3" dependencies = [ "clap", "colored", diff --git a/Cargo.toml b/Cargo.toml index ec30b8a..95b0d78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tensara" -version = "0.3.0" +version = "1.1.3" edition = "2021" build = "build.rs" diff --git a/src/pretty.rs b/src/pretty.rs index a547f13..21c9bd0 100644 --- a/src/pretty.rs +++ b/src/pretty.rs @@ -591,6 +591,7 @@ pub fn pretty_print_checker_response(response: impl Read, parameters: &Parameter | "TIME_LIMIT_EXCEEDED" | "MEMORY_LIMIT_EXCEEDED" | "RATE_LIMIT_EXCEEDED" + | "TOO_MANY_REQUESTS" | "SANDBOX_TIMEOUT" | "SANDBOX_OUTPUT_LIMIT" | "OUTPUT_LIMIT_EXCEEDED" @@ -717,6 +718,7 @@ pub fn pretty_print_benchmark_response_v2(response: impl Read, parameters: &Para | "TIME_LIMIT_EXCEEDED" | "MEMORY_LIMIT_EXCEEDED" | "RATE_LIMIT_EXCEEDED" + | "TOO_MANY_REQUESTS" | "SANDBOX_TIMEOUT" | "SANDBOX_OUTPUT_LIMIT" | "OUTPUT_LIMIT_EXCEEDED" @@ -1274,6 +1276,7 @@ pub fn pretty_print_submit_response(response: impl Read) { let mut total_benchmarks: u64 = 0; let mut benchmark_results = vec![]; let mut completed = 0; + let mut finished = false; for line in reader.lines().flatten() { spinner.tick(); @@ -1392,6 +1395,7 @@ pub fn pretty_print_submit_response(response: impl Read) { } Some("ACCEPTED") => { + finished = true; if let Some(pb) = progress_bar.take() { pb.finish_and_clear(); } @@ -1454,6 +1458,7 @@ pub fn pretty_print_submit_response(response: impl Read) { } Some("WRONG_ANSWER") => { + finished = true; if let Some(pb) = progress_bar.take() { pb.finish_and_clear(); } @@ -1559,6 +1564,7 @@ pub fn pretty_print_submit_response(response: impl Read) { } Some("ERROR") => { + finished = true; if let Some(pb) = progress_bar.take() { pb.finish_and_clear(); } @@ -1575,6 +1581,7 @@ pub fn pretty_print_submit_response(response: impl Read) { } Some("COMPILE_ERROR") => { + finished = true; if let Some(pb) = progress_bar.take() { pb.finish_and_clear(); } @@ -1588,10 +1595,50 @@ pub fn pretty_print_submit_response(response: impl Read) { break; } + Some( + "RUNTIME_ERROR" + | "RATE_LIMIT_EXCEEDED" + | "TOO_MANY_REQUESTS" + | "TIME_LIMIT_EXCEEDED" + | "MEMORY_LIMIT_EXCEEDED" + | "SANDBOX_TIMEOUT" + | "SANDBOX_OUTPUT_LIMIT" + | "OUTPUT_LIMIT_EXCEEDED", + ) => { + finished = true; + if let Some(pb) = progress_bar.take() { + pb.finish_and_clear(); + } + let event_type = current_event.as_deref().unwrap_or("ERROR"); + if let Ok(data) = serde_json::from_str::(json_data) { + let msg = data + .error + .or(data.message) + .unwrap_or_else(|| "Unknown error".to_string()); + spinner.abandon_with_message(format!("{event_type}: {msg}")); + } else { + spinner.abandon_with_message(format!("{event_type}")); + } + break; + } + Some(_) => {} None => {} } } + + if !finished { + if let Some(pb) = progress_bar.take() { + pb.finish_and_clear(); + } + spinner.finish_and_clear(); + println!( + "{}", + style("No response received from server.") + .red() + .bold() + ); + } } pub fn pretty_print_benchmark_response(mut response: impl Read) {