From 8b125ac5e7ac4233354044ff742cefb56fb83337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ortega=20Froysa?= Date: Fri, 3 Oct 2025 09:07:09 +0200 Subject: [PATCH] Simplify writing with a write buffer. --- src/worker.rs | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/worker.rs b/src/worker.rs index 07cb529..781eb8d 100644 --- a/src/worker.rs +++ b/src/worker.rs @@ -27,6 +27,8 @@ use std::fs; use std::io::Read; use std::boxed::Box; +static MAX_WRITE_BUF_SIZE:usize = 1024; + pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> Result<(), String> { let in_reader:Box = match in_path { Some(path) => { @@ -56,33 +58,34 @@ pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> Result<(), String> let mut last_ch = '\0'; let mut tab_num = 0; + let mut write_buf = String::new(); for i in in_reader.bytes() { let ch = i.unwrap() as char; match ch { '[' | '{' => { tab_num += 1; - out_writer.write(format!("{ch}\n").as_bytes()).unwrap(); + write_buf += format!("{ch}\n").as_str(); for _ in 0..tab_num { - out_writer.write(b" ").unwrap(); + write_buf += " "; } last_ch = ' '; }, ']' | '}' => { tab_num -= 1; - out_writer.write(b"\n").unwrap(); + write_buf += "\n"; for _ in 0..tab_num { - out_writer.write(b" ").unwrap(); + write_buf += " "; } - out_writer.write(format!("{ch}").as_bytes()).unwrap(); + write_buf.push(ch); last_ch = ch; }, ',' => { - out_writer.write(format!("{ch}").as_bytes()).unwrap(); + write_buf.push(ch); if last_ch == '}' || last_ch == ']' { - out_writer.write(b"\n").unwrap(); + write_buf.push('\n'); for _ in 0..tab_num { - out_writer.write(b" ").unwrap(); + write_buf += " "; } last_ch = ' '; } else { @@ -91,11 +94,20 @@ pub fn work(in_path:Option<&str>, out_path:Option<&str>) -> Result<(), String> }, _ => { if ch != ' ' || last_ch != ' ' { - out_writer.write(format!("{ch}").as_bytes()).unwrap(); + write_buf.push(ch); last_ch = ch; } }, } + + if write_buf.len() >= MAX_WRITE_BUF_SIZE { + out_writer.write_all(write_buf.as_bytes()).unwrap(); + write_buf.clear(); + } + } + + if write_buf.len() > 0 { + out_writer.write_all(write_buf.as_bytes()).unwrap(); } Ok(())