From 2ede3db3b8e42a9562c237e6d998864fd1e2e0d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ortega=20Froysa?= Date: Mon, 29 Sep 2025 11:42:34 +0200 Subject: [PATCH] Better error messages. --- src/main.rs | 13 ++++++++----- src/worker.rs | 41 +++++++++++++++++++++++------------------ 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/main.rs b/src/main.rs index 3604055..b5deb03 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,7 +23,6 @@ */ use std::env; -use std::io; use std::process; use crate::worker::work; @@ -52,7 +51,7 @@ fn print_help() { env!("CARGO_PKG_NAME"), env!("CARGO_PKG_NAME")); } -fn main() -> io::Result<()> { +fn main() { let args:Vec = env::args().collect(); let mut in_path:Option<&str> = None; let mut out_path:Option<&str> = None; @@ -66,10 +65,10 @@ fn main() -> io::Result<()> { for i in &args[1..args.len()] { if i == "-h" { print_help(); - return Ok(()); + return; } else if i == "-v" { print_version(); - return Ok(()); + return; } else if i.starts_with("-") && i != "-" { eprintln!("Invalid argument '{}'. Use -h for help information.", i); process::exit(1); @@ -83,5 +82,9 @@ fn main() -> io::Result<()> { out_path = Some(args[2].as_str()); } - work(in_path, out_path) + let res = work(in_path, out_path); + if let Err(err) = res { + eprintln!("{}", err); + process::exit(1); + } } diff --git a/src/worker.rs b/src/worker.rs index eb16173..0867286 100644 --- a/src/worker.rs +++ b/src/worker.rs @@ -6,11 +6,14 @@ use std::boxed::Box; // Read 1KiB of the file at a time. static BLOCK_SIZE:usize = 1024; -pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> io::Result<()> { +pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> Result<(), String> { let mut in_reader:Box = match in_path { - Some(x) => { - let in_file = fs::File::open(x)?; - Box::new(io::BufReader::new(in_file)) + Some(path) => { + let in_file = fs::File::open(path); + if let Err(e) = in_file { + return Err(format!("{path}: {e}")); + } + Box::new(io::BufReader::new(in_file.unwrap())) }, None => { Box::new(io::stdin()) @@ -18,9 +21,12 @@ pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> io::Result<()> { }; let mut out_writer:Box = match out_path { - Some(x) => { - let out_file = fs::File::create(x)?; - Box::new(io::BufWriter::new(out_file)) + Some(path) => { + let out_file = fs::File::create(path); + if let Err(e) = out_file { + return Err(format!("{path}: {e}")); + } + Box::new(io::BufWriter::new(out_file.unwrap())) }, None => { Box::new(io::stdout()) @@ -31,37 +37,37 @@ pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> io::Result<()> { let mut last_ch:char = '\0'; let mut tab_num = 0; - while in_reader.read(&mut read_buf)? > 0 { + while in_reader.read(&mut read_buf).unwrap() > 0 { for i in read_buf { let ch = i as char; match ch { '[' | '{' => { tab_num += 1; - out_writer.write(format!("{}\n", ch).as_bytes())?; + out_writer.write(format!("{}\n", ch).as_bytes()).unwrap(); for _ in 0..tab_num { - out_writer.write(b" ")?; + out_writer.write(b" ").unwrap(); } last_ch = ' '; }, ']' | '}' => { tab_num -= 1; - out_writer.write(b"\n")?; + out_writer.write(b"\n").unwrap(); for _ in 0..tab_num { - out_writer.write(b" ")?; + out_writer.write(b" ").unwrap(); } - out_writer.write(format!("{}", ch).as_bytes())?; + out_writer.write(format!("{}", ch).as_bytes()).unwrap(); last_ch = ch; }, ',' => { - out_writer.write(format!("{}\n", ch).as_bytes())?; + out_writer.write(format!("{}\n", ch).as_bytes()).unwrap(); for _ in 0..tab_num { - out_writer.write(b" ")?; + out_writer.write(b" ").unwrap(); } last_ch = ' '; }, _ => { if ch != ' ' || last_ch != ' ' { - out_writer.write(format!("{}", ch).as_bytes())?; + out_writer.write(format!("{}", ch).as_bytes()).unwrap(); last_ch = ch; } }, @@ -69,8 +75,7 @@ pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> io::Result<()> { } } - out_writer.flush()?; + out_writer.flush().unwrap(); Ok(()) - }