Skip to content

Commit c8ea3b0

Browse files
committed
Reduce unwraps
1 parent 2c925b6 commit c8ea3b0

File tree

4 files changed

+28
-31
lines changed

4 files changed

+28
-31
lines changed

src/file_parser/codefile.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ impl CodeFile {
7979
fn parse_code(code: &str, language: Language) -> Result<(String, String)> {
8080
let start = code
8181
.find("#LCSTART")
82-
.map(|idx| idx + code[idx..].find('\n').unwrap_or(0))
82+
.map(|idx| idx + code[idx..].find('\n').unwrap_or_default())
8383
// This returning None means the user
8484
// wants to submit a practically empty file,
8585
// but hey we don't judge!
86-
.unwrap_or(0);
86+
.unwrap_or_default();
8787

8888
let end = code.find("#LCEND").unwrap_or(code.len());
8989
let question_title = code[code.find("leetcode.com/problems/").ok_or_else(|| {

src/handlers/helpers.rs

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use colored::Colorize;
2+
use eyre::Result;
23
use serde::{Deserialize, Serialize};
34

45
#[derive(Debug, Serialize)]
@@ -72,39 +73,29 @@ pub(crate) struct BoilerPlateCode {
7273

7374
use super::super::file_parser::language::Language;
7475
impl BoilerPlateCode {
75-
pub(crate) fn save_code(&self, filename: &str, title_slug: &str) {
76-
let language = Language::from_slug(&self.langSlug).unwrap_or_else(|| {
77-
eprintln!("Error: Unable to identify language of code file!");
78-
std::process::exit(1);
79-
});
80-
let Ok(mut file) = std::fs::File::create(filename) else{
81-
eprintln!("Error: Unable to create file");
82-
std::process::exit(1);
83-
};
76+
pub(crate) fn save_code(&self, filename: &str, title_slug: &str) -> Result<()> {
77+
let language = Language::from_slug(&self.langSlug)
78+
.ok_or_else(|| eyre::eyre!("Unable to identify language of code file!"))?;
79+
let mut file = std::fs::File::create(filename)?;
8480
let comment = format!(
8581
" {} #LCEND https://leetcode.com/problems/{}/",
8682
language.inline_comment_start(),
8783
title_slug.to_lowercase().trim().replace(" ", "-")
8884
);
85+
8986
// write code into file along with the comment
90-
if let Err(_) = std::io::Write::write_all(&mut file, self.code.as_bytes()) {
91-
eprintln!("Error: Unable to write code into file");
92-
std::process::exit(1);
93-
}
94-
if let Err(_) = std::io::Write::write_all(&mut file, comment.as_bytes()) {
95-
eprintln!("Error: Unable to write code into file");
96-
std::process::exit(1);
97-
}
87+
std::io::Write::write_all(&mut file, self.code.as_bytes())?;
88+
std::io::Write::write_all(&mut file, comment.as_bytes())?;
89+
90+
Ok(())
9891
}
9992
pub(crate) fn is_supported(&self) -> bool {
10093
Language::from_slug(&self.langSlug).is_some()
10194
}
102-
pub(crate) fn extension(&self) -> String {
103-
let language = Language::from_slug(&self.langSlug).unwrap_or_else(|| {
104-
eprintln!("Error: Unable to identify language of code file!");
105-
std::process::exit(1);
106-
});
107-
language.extension().to_owned()
95+
pub(crate) fn extension(&self) -> Result<String> {
96+
let language = Language::from_slug(&self.langSlug)
97+
.ok_or_else(|| eyre::eyre!("Unable to identify language of code file!"))?;
98+
Ok(language.extension().to_owned())
10899
}
109100
}
110101

src/handlers/leetcode/api/question.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,15 +171,15 @@ impl LeetCode<Authorized> {
171171
};
172172

173173
let mut input = String::new();
174-
println!("Filename (main.{}) : ", &(boiler_code.extension()));
174+
println!("Filename (main.{}) : ", &(boiler_code.extension()?));
175175
std::io::stdin().read_line(&mut input)?;
176176
let input = input.trim();
177177
let filename = if input.is_empty() {
178-
format!("main.{}", boiler_code.extension())
178+
format!("main.{}", boiler_code.extension()?)
179179
} else {
180180
input.to_string()
181181
};
182-
boiler_code.save_code(&filename, &title_slug);
182+
boiler_code.save_code(&filename, &title_slug)?;
183183

184184
Ok(data.json::<Data>().map(|op| op.data.question)?)
185185
}

src/main.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,15 @@ fn main() -> Result<()> {
4444
}
4545
Some(Commands::Question { question_name }) => {
4646
let question_name = if let Some(idx) = question_name.find("leetcode.com/problems/") {
47-
let problem = (&question_name[idx..]).split_whitespace().next().unwrap();
48-
let problem = problem.split('/').skip(2).next().unwrap();
49-
problem
47+
let question_title = question_name[idx..]
48+
.split_whitespace()
49+
.next()
50+
.expect("Should be Some since the find method succeed")
51+
.split('/')
52+
.skip(2)
53+
.next()
54+
.ok_or_else(|| eyre::eyre!("Invalid link, expected question identifier"))?;
55+
question_title
5056
} else {
5157
&question_name
5258
};

0 commit comments

Comments
 (0)