Skip to content

Commit f7e3d45

Browse files
committed
CLI can now parse link
Signed-off-by: dvishal485 <dvishal485@gmail.com>
1 parent 1c89e28 commit f7e3d45

File tree

2 files changed

+156
-141
lines changed

2 files changed

+156
-141
lines changed

src/main.rs

Lines changed: 12 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
use crate::file_parser::codefile::CodeFile;
2-
use crate::leetcode_api::utils::{ExecutionResult, SubmissionResult};
2+
use crate::utils::{execute_testcases, submit};
33
use clap::{Parser, Subcommand};
44
use colored::Colorize;
5-
use leetcode_api::leetcode::{Authorized, LeetCode};
5+
use leetcode_api::leetcode::LeetCode;
66
use std::process::ExitCode;
77

88
mod file_parser;
99
mod leetcode_api;
10+
mod utils;
1011

1112
#[derive(Parser)]
1213
#[command(version)]
@@ -137,7 +138,15 @@ fn main() -> ExitCode {
137138
}
138139
}
139140
Commands::Question { question_name } => {
140-
let question = lc.question_content(&question_name);
141+
let question_name = if let Some(idx) = question_name.find("leetcode.com/problems/")
142+
{
143+
let problem = (&question_name[idx..]).split_whitespace().next().unwrap();
144+
let problem = problem.split('/').skip(2).next().unwrap();
145+
problem
146+
} else {
147+
&question_name
148+
};
149+
let question = lc.question_content(question_name);
141150
if question.is_ok() {
142151
let question = question.unwrap();
143152
let filename = format!("{}.html", question_name);
@@ -197,141 +206,3 @@ fn main() -> ExitCode {
197206
}
198207
}
199208
}
200-
201-
fn execute_testcases(
202-
filename: Option<String>,
203-
testcases: Option<String>,
204-
lc: &LeetCode<Authorized>,
205-
) -> (bool, CodeFile) {
206-
let is_correct;
207-
let code_file: CodeFile;
208-
if let Some(filename) = filename {
209-
code_file = CodeFile::from_file(&filename);
210-
} else {
211-
code_file = CodeFile::from_dir();
212-
}
213-
if let Some(testcases) = testcases {
214-
let Ok(data_input) = std::fs::read_to_string(&testcases) else{
215-
eprintln!("Error opening testcases file!");
216-
return (false, code_file);
217-
};
218-
match lc.execute(&code_file, data_input) {
219-
Ok(result) => {
220-
println!();
221-
is_correct = match result {
222-
ExecutionResult::Success(result) => {
223-
result.display();
224-
result.is_correct()
225-
}
226-
ExecutionResult::LimitExceeded(limit_exceeded) => {
227-
limit_exceeded.display();
228-
false
229-
}
230-
ExecutionResult::CompileError(compile_error) => {
231-
compile_error.display();
232-
false
233-
}
234-
ExecutionResult::RuntimeError(runtime_error) => {
235-
runtime_error.display();
236-
false
237-
}
238-
ExecutionResult::PendingResult(state) => {
239-
println!("{}", state);
240-
false
241-
}
242-
ExecutionResult::Unknown(_) => {
243-
eprintln!("Unknown Error!");
244-
false
245-
}
246-
}
247-
}
248-
Err(e) => {
249-
eprintln!("Some error occured! {e}");
250-
is_correct = false;
251-
}
252-
}
253-
} else {
254-
let result = lc.execute_default(&code_file);
255-
println!();
256-
match result {
257-
Ok(result) => {
258-
is_correct = match result {
259-
ExecutionResult::Success(result) => {
260-
result.display();
261-
if !result.is_correct() {
262-
println!(
263-
"{}",
264-
"Testcases can be found in testcase.txt".yellow().italic()
265-
);
266-
}
267-
result.is_correct()
268-
}
269-
ExecutionResult::LimitExceeded(limit_exceeded) => {
270-
limit_exceeded.display();
271-
false
272-
}
273-
ExecutionResult::CompileError(compile_error) => {
274-
compile_error.display();
275-
false
276-
}
277-
ExecutionResult::RuntimeError(runtime_error) => {
278-
runtime_error.display();
279-
false
280-
}
281-
ExecutionResult::PendingResult(state) => {
282-
println!("{}", state);
283-
false
284-
}
285-
ExecutionResult::Unknown(_) => {
286-
eprintln!("Unknown Error!");
287-
false
288-
}
289-
}
290-
}
291-
Err(e) => {
292-
eprintln!("Some error occured! {e}");
293-
is_correct = false;
294-
}
295-
}
296-
}
297-
(is_correct, code_file)
298-
}
299-
300-
fn submit(lc: &LeetCode<Authorized>, code_file: CodeFile) -> ExitCode {
301-
match lc.submit(&code_file) {
302-
Ok(result) => match result {
303-
SubmissionResult::Success(success) => {
304-
success.display();
305-
ExitCode::SUCCESS
306-
}
307-
SubmissionResult::LimitExceeded(wrong) => {
308-
wrong.display();
309-
ExitCode::FAILURE
310-
}
311-
SubmissionResult::PendingResult(state) => {
312-
println!("{}", state);
313-
ExitCode::FAILURE
314-
}
315-
SubmissionResult::CompileError(compile_err) => {
316-
compile_err.display();
317-
ExitCode::FAILURE
318-
}
319-
SubmissionResult::RuntimeError(runtime_error) => {
320-
runtime_error.display();
321-
ExitCode::FAILURE
322-
}
323-
SubmissionResult::Wrong(wrong) => {
324-
wrong.display();
325-
ExitCode::FAILURE
326-
}
327-
SubmissionResult::Unknown(_) => {
328-
eprintln!("Unknown Error!");
329-
ExitCode::FAILURE
330-
}
331-
},
332-
Err(e) => {
333-
eprintln!("Some error occured! {e}");
334-
return ExitCode::FAILURE;
335-
}
336-
}
337-
}

src/utils.rs

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
use crate::file_parser::codefile::CodeFile;
2+
use crate::leetcode_api::utils::{ExecutionResult, SubmissionResult};
3+
use colored::Colorize;
4+
use crate::leetcode_api::leetcode::{Authorized, LeetCode};
5+
use std::process::ExitCode;
6+
7+
8+
pub(crate) fn execute_testcases(
9+
filename: Option<String>,
10+
testcases: Option<String>,
11+
lc: &LeetCode<Authorized>,
12+
) -> (bool, CodeFile) {
13+
let is_correct;
14+
let code_file: CodeFile;
15+
if let Some(filename) = filename {
16+
code_file = CodeFile::from_file(&filename);
17+
} else {
18+
code_file = CodeFile::from_dir();
19+
}
20+
if let Some(testcases) = testcases {
21+
let Ok(data_input) = std::fs::read_to_string(&testcases) else{
22+
eprintln!("Error opening testcases file!");
23+
return (false, code_file);
24+
};
25+
match lc.execute(&code_file, data_input) {
26+
Ok(result) => {
27+
println!();
28+
is_correct = match result {
29+
ExecutionResult::Success(result) => {
30+
result.display();
31+
result.is_correct()
32+
}
33+
ExecutionResult::LimitExceeded(limit_exceeded) => {
34+
limit_exceeded.display();
35+
false
36+
}
37+
ExecutionResult::CompileError(compile_error) => {
38+
compile_error.display();
39+
false
40+
}
41+
ExecutionResult::RuntimeError(runtime_error) => {
42+
runtime_error.display();
43+
false
44+
}
45+
ExecutionResult::PendingResult(state) => {
46+
println!("{}", state);
47+
false
48+
}
49+
ExecutionResult::Unknown(_) => {
50+
eprintln!("Unknown Error!");
51+
false
52+
}
53+
}
54+
}
55+
Err(e) => {
56+
eprintln!("Some error occured! {e}");
57+
is_correct = false;
58+
}
59+
}
60+
} else {
61+
let result = lc.execute_default(&code_file);
62+
println!();
63+
match result {
64+
Ok(result) => {
65+
is_correct = match result {
66+
ExecutionResult::Success(result) => {
67+
result.display();
68+
if !result.is_correct() {
69+
println!(
70+
"{}",
71+
"Testcases can be found in testcase.txt".yellow().italic()
72+
);
73+
}
74+
result.is_correct()
75+
}
76+
ExecutionResult::LimitExceeded(limit_exceeded) => {
77+
limit_exceeded.display();
78+
false
79+
}
80+
ExecutionResult::CompileError(compile_error) => {
81+
compile_error.display();
82+
false
83+
}
84+
ExecutionResult::RuntimeError(runtime_error) => {
85+
runtime_error.display();
86+
false
87+
}
88+
ExecutionResult::PendingResult(state) => {
89+
println!("{}", state);
90+
false
91+
}
92+
ExecutionResult::Unknown(_) => {
93+
eprintln!("Unknown Error!");
94+
false
95+
}
96+
}
97+
}
98+
Err(e) => {
99+
eprintln!("Some error occured! {e}");
100+
is_correct = false;
101+
}
102+
}
103+
}
104+
(is_correct, code_file)
105+
}
106+
107+
pub(crate) fn submit(lc: &LeetCode<Authorized>, code_file: CodeFile) -> ExitCode {
108+
match lc.submit(&code_file) {
109+
Ok(result) => match result {
110+
SubmissionResult::Success(success) => {
111+
success.display();
112+
ExitCode::SUCCESS
113+
}
114+
SubmissionResult::LimitExceeded(wrong) => {
115+
wrong.display();
116+
ExitCode::FAILURE
117+
}
118+
SubmissionResult::PendingResult(state) => {
119+
println!("{}", state);
120+
ExitCode::FAILURE
121+
}
122+
SubmissionResult::CompileError(compile_err) => {
123+
compile_err.display();
124+
ExitCode::FAILURE
125+
}
126+
SubmissionResult::RuntimeError(runtime_error) => {
127+
runtime_error.display();
128+
ExitCode::FAILURE
129+
}
130+
SubmissionResult::Wrong(wrong) => {
131+
wrong.display();
132+
ExitCode::FAILURE
133+
}
134+
SubmissionResult::Unknown(_) => {
135+
eprintln!("Unknown Error!");
136+
ExitCode::FAILURE
137+
}
138+
},
139+
Err(e) => {
140+
eprintln!("Some error occured! {e}");
141+
return ExitCode::FAILURE;
142+
}
143+
}
144+
}

0 commit comments

Comments
 (0)