From ab0a29b472c8cecec6591a94795811eb1d2ad5d2 Mon Sep 17 00:00:00 2001 From: dfayd0 <78728332+dfayd0@users.noreply.github.com> Date: Mon, 7 Jul 2025 21:25:31 +0200 Subject: [PATCH 1/2] feat(main): spinner for each command --- Cargo.toml | 1 + src/main.rs | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 530719f..43eed90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,3 +37,4 @@ html2md = "0.2.15" tempfile = "3.20.0" regex = "1.11.1" thiserror = "2.0.12" +spinners = "4.1.1" diff --git a/src/main.rs b/src/main.rs index 4ce5f4b..282b39f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,10 @@ use leetcode_cli::{ LeetcodeApiRunner, RuntimeConfigSetup, }; +use spinners::{ + Spinner, + Spinners, +}; #[tokio::main] async fn main() -> Result<(), Box> { @@ -18,7 +22,13 @@ async fn main() -> Result<(), Box> { Commands::Info { id, } => { - println!("{}", api_runner.get_problem_info(*id).await?); + let mut spinner = Spinner::new( + Spinners::Dots12, + "Fetching problem info...".into(), + ); + let result = api_runner.get_problem_info(*id).await?; + spinner.stop(); + println!("{}", result); }, Commands::Start { id, @@ -29,24 +39,35 @@ async fn main() -> Result<(), Box> { Some(lang) => utils::parse_programming_language(lang)?, None => utils::parse_programming_language(default)?, }; + let mut spinner = Spinner::new( + Spinners::Dots12, + "Starting problem setup...".into(), + ); let start_problem = api_runner.start_problem(*id, lang).await?; + spinner.stop(); println!("{}\n\nHappy coding :)", start_problem); }, Commands::Test { id, path_to_file, } => { + let mut spinner = + Spinner::new(Spinners::Dots12, "Running tests...".into()); let test_result = api_runner.test_response(*id, path_to_file.clone()).await?; + spinner.stop(); println!("Test result: {}", test_result); }, Commands::Submit { id, path_to_file, } => { + let mut spinner = + Spinner::new(Spinners::Dots12, "Submitting solution...".into()); let submit_result = api_runner .submit_response(*id, path_to_file.clone()) .await?; + spinner.stop(); println!("Submit result: {}", submit_result); }, } From 023285344e611dd3ec0bd9fc04fdc73585f40436 Mon Sep 17 00:00:00 2001 From: dfayd0 <78728332+dfayd0@users.noreply.github.com> Date: Mon, 7 Jul 2025 21:36:12 +0200 Subject: [PATCH 2/2] refactor(main): matching PR comments --- src/main.rs | 68 +++++++++++++++++++++++++++------------------------- src/utils.rs | 4 ++++ 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/src/main.rs b/src/main.rs index 282b39f..e7b22c8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,15 +1,14 @@ use clap::Parser; use leetcode_cli::{ - utils, + utils::{ + parse_programming_language, + spin_the_spinner, + }, Cli, Commands, LeetcodeApiRunner, RuntimeConfigSetup, }; -use spinners::{ - Spinner, - Spinners, -}; #[tokio::main] async fn main() -> Result<(), Box> { @@ -22,13 +21,13 @@ async fn main() -> Result<(), Box> { Commands::Info { id, } => { - let mut spinner = Spinner::new( - Spinners::Dots12, - "Fetching problem info...".into(), - ); - let result = api_runner.get_problem_info(*id).await?; - spinner.stop(); - println!("{}", result); + let mut spin = spin_the_spinner("Fetching problem info..."); + let result = api_runner.get_problem_info(*id).await; + spin.stop(); + match result { + Ok(info) => println!("{}", info), + Err(e) => eprintln!("Error fetching problem info: {}", e), + } }, Commands::Start { id, @@ -36,39 +35,42 @@ async fn main() -> Result<(), Box> { } => { let default = &rcs.config.default_language.unwrap(); let lang = match language { - Some(lang) => utils::parse_programming_language(lang)?, - None => utils::parse_programming_language(default)?, + Some(lang) => parse_programming_language(lang)?, + None => parse_programming_language(default)?, }; - let mut spinner = Spinner::new( - Spinners::Dots12, - "Starting problem setup...".into(), - ); - let start_problem = api_runner.start_problem(*id, lang).await?; - spinner.stop(); - println!("{}\n\nHappy coding :)", start_problem); + let mut spin = spin_the_spinner("Starting problem setup..."); + let start_problem = api_runner.start_problem(*id, lang).await; + spin.stop(); + match start_problem { + Ok(message) => println!("{}\n\nHappy coding :)", message), + Err(e) => eprintln!("Error starting problem: {}", e), + } }, Commands::Test { id, path_to_file, } => { - let mut spinner = - Spinner::new(Spinners::Dots12, "Running tests...".into()); + let mut spin = spin_the_spinner("Running tests..."); let test_result = - api_runner.test_response(*id, path_to_file.clone()).await?; - spinner.stop(); - println!("Test result: {}", test_result); + api_runner.test_response(*id, path_to_file.clone()).await; + spin.stop(); + match test_result { + Ok(result) => println!("Test result: {}", result), + Err(e) => eprintln!("Error running tests: {}", e), + } }, Commands::Submit { id, path_to_file, } => { - let mut spinner = - Spinner::new(Spinners::Dots12, "Submitting solution...".into()); - let submit_result = api_runner - .submit_response(*id, path_to_file.clone()) - .await?; - spinner.stop(); - println!("Submit result: {}", submit_result); + let mut spin = spin_the_spinner("Submitting solution..."); + let submit_result = + api_runner.submit_response(*id, path_to_file.clone()).await; + spin.stop(); + match submit_result { + Ok(result) => println!("Submit result: {}", result), + Err(e) => eprintln!("Error submitting solution: {}", e), + } }, } Ok(()) diff --git a/src/utils.rs b/src/utils.rs index 18b7d0b..feb87da 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -155,3 +155,7 @@ pub fn extension_programming_language( _ => panic!("Unsupported language: {}", extension), } } + +pub fn spin_the_spinner(message: &str) -> spinners::Spinner { + spinners::Spinner::new(spinners::Spinners::Dots12, message.to_string()) +}