diff --git a/Cargo.lock b/Cargo.lock index 6861b53..8c8ebea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,12 +11,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "atty" version = "0.2.14" @@ -250,7 +244,6 @@ version = "1.0.1" dependencies = [ "clap", "criterion", - "utf8-chars", ] [[package]] @@ -528,15 +521,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" -[[package]] -name = "utf8-chars" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1348d8face79d019be7cbc0198e36bf93e160ddbfaa7bb54c9592627b9ec841" -dependencies = [ - "arrayvec", -] - [[package]] name = "vec_map" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 11408e8..9247338 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,6 @@ categories = ["command-line-utilities"] [dependencies] clap = { version= "2.33.3", optional = true } -utf8-chars = "1.0.0" [dev-dependencies] criterion = "0.3" diff --git a/src/lib.rs b/src/lib.rs index b2a75a1..d30e9bc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,6 @@ use std::error::Error; use std::io::{BufReader, BufWriter, Read, Write}; -use utf8_chars::BufReadCharsExt; /// /// Set the indentation used for the formatting. @@ -56,24 +55,24 @@ where let mut indent_level = 0usize; let mut newline_requested = false; // invalidated if next character is ] or } - for char in reader.chars() { + for char in reader.bytes() { let char = char?; if in_string { let mut escape_here = false; match char { - '"' => { + b'"' => { if !escaped { in_string = false; } } - '\\' => { + b'\\' => { if !escaped { escape_here = true; } } _ => {} } - writer.write_all(char.encode_utf8(&mut [0; 4]).as_bytes())?; + writer.write_all(&[char])?; escaped = escape_here; } else { let mut auto_push = true; @@ -81,44 +80,44 @@ where let old_level = indent_level; match char { - '"' => in_string = true, - ' ' | '\n' | '\t' => continue, - '[' => { + b'"' => in_string = true, + b' ' | b'\n' | b'\t' => continue, + b'[' => { indent_level += 1; request_newline = true; } - '{' => { + b'{' => { indent_level += 1; request_newline = true; } - '}' | ']' => { + b'}' | b']' => { indent_level = indent_level.saturating_sub(1); if !newline_requested { // see comment below about newline_requested - writeln!(writer)?; + writer.write_all(&[b'\n'])?; indent_buffered(writer, indent_level, indentation)?; } } - ':' => { + b':' => { auto_push = false; - writer.write_all(char.encode_utf8(&mut [0; 4]).as_bytes())?; - writer.write_all(" ".as_bytes())?; + writer.write_all(&[char])?; + writer.write_all(&[b' '])?; } - ',' => { + b',' => { request_newline = true; } _ => {} } - if newline_requested && char != ']' && char != '}' { + if newline_requested && char != b']' && char != b'}' { // newline only happens after { [ and , // this means we can safely assume that it being followed up by } or ] // means an empty object/array - writeln!(writer)?; + writer.write_all(&[b'\n'])?; indent_buffered(writer, old_level, indentation)?; } if auto_push { - writer.write_all(char.encode_utf8(&mut [0; 4]).as_bytes())?; + writer.write_all(&[char])?; } newline_requested = request_newline; @@ -139,8 +138,7 @@ where for _ in 0..level { match indent_str { Indentation::Default => { - writer.write_all(" ".as_bytes())?; - writer.write_all(" ".as_bytes())?; + writer.write_all(b" ")?; } Indentation::Custom(indent) => { writer.write_all(indent.as_bytes())?;