From 1e96fa989def43b2ee2aac7c194faddd05f6a09b Mon Sep 17 00:00:00 2001 From: sgoudham Date: Fri, 28 Jan 2022 21:18:05 +0000 Subject: [PATCH] Ensure that files are not overwritten when uwu'ifying --- src/main.rs | 4 ++-- src/uwuify.rs | 25 +++++++++++++++++-------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7c3f6f4..a4cad31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,11 +13,11 @@ struct Args { text: Option, /// The file to uwu'ify - #[clap(short, long, parse(from_os_str), conflicts_with = "text", requires = "outfile", value_name = "FILE", display_order = 2)] + #[clap(short, long, parse(from_os_str), conflicts_with = "text", requires = "outfile", value_name = "FILE", value_hint = clap::ValueHint::FilePath, display_order = 2)] infile: Option, /// The file to output uwu'ified text - #[clap(short, long, value_name = "FILE", display_order = 3)] + #[clap(short, long, value_name = "FILE", value_hint = clap::ValueHint::FilePath, display_order = 3)] outfile: Option, /// The modifier to determine how many words to be uwu'ified diff --git a/src/uwuify.rs b/src/uwuify.rs index bd56fb4..173fc74 100644 --- a/src/uwuify.rs +++ b/src/uwuify.rs @@ -1,4 +1,4 @@ -use std::io::Error; +use std::error::Error; use std::path::PathBuf; use linkify::{LinkFinder, LinkKind}; @@ -59,22 +59,27 @@ impl UwUify { } } - pub fn uwuify(&self) -> Result<(), Error> { + pub fn uwuify(&self) -> Result<(), Box> { // Handle Text if !self.text.is_empty() { let uwu_text = self.uwuify_sentence(&self.text); // Handle Text Output if !self.output.is_empty() { + if UwUOutFile::exists(&self.output) { + return Err(format!("File '{}' already exists, aborting operation", &self.output).into()); + } + let mut uwu_out_file = match UwUOutFile::new(&self.output) { Ok(uwu_out_file) => uwu_out_file, - Err(err) => return Err(err) + Err(err) => return Err(err.into()) }; + let mut uwu_progress_bar = UwUProgressBar::new(uwu_text.len() as u64); match uwu_out_file.write_string(&uwu_text) { Ok(_) => (), - Err(err) => return Err(err), + Err(err) => return Err(err.into()), }; uwu_progress_bar.update_progess(uwu_text.len()); @@ -84,20 +89,24 @@ impl UwUify { } } else { // Handle File I/O + if UwUOutFile::exists(&self.output) { + return Err(format!("File '{}' already exists, aborting operation", &self.output).into()); + }; + let mut uwu_in_file = match UwUInFile::new(&self.input) { Ok(uwu_in_file) => uwu_in_file, - Err(err) => return Err(err), + Err(err) => return Err(err.into()), }; let mut uwu_out_file = match UwUOutFile::new(&self.output) { Ok(uwu_out_file) => uwu_out_file, - Err(err) => return Err(err) + Err(err) => return Err(err.into()) }; let mut uwu_progress_bar = UwUProgressBar::new(uwu_in_file.get_file_bytes()); loop { let bytes_read_in = match uwu_in_file.read_until_newline() { Ok(bytes_read_in) => bytes_read_in, - Err(err) => return Err(err), + Err(err) => return Err(err.into()), }; if bytes_read_in == 0 { break; } @@ -105,7 +114,7 @@ impl UwUify { let uwu_sentence = self.uwuify_sentence(&utf8_str); match uwu_out_file.write_string_with_newline(&uwu_sentence) { Ok(_) => (), - Err(err) => return Err(err), + Err(err) => return Err(err.into()), }; uwu_progress_bar.update_progess(bytes_read_in);