diff --git a/Cargo.lock b/Cargo.lock index 05aebe8..b7666ee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -43,7 +34,6 @@ checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" name = "jsonm" version = "0.2.2" dependencies = [ - "regex", "serde", "serde_json", ] @@ -72,35 +62,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "regex" -version = "1.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" - [[package]] name = "ryu" version = "1.0.21" diff --git a/Cargo.toml b/Cargo.toml index 1c7131b..73f886c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,6 @@ keywords = ["json", "jsonm", "compress"] [dependencies] serde = "1.0.228" -regex = "1" [dependencies.serde_json] version = "1.0" diff --git a/src/packer.rs b/src/packer.rs index 294fa6d..758b9df 100644 --- a/src/packer.rs +++ b/src/packer.rs @@ -1,8 +1,6 @@ -extern crate regex; extern crate serde; extern crate serde_json; -use self::regex::Regex; use self::serde::Serialize; use serde_json::Value; use std::collections::HashMap; @@ -339,8 +337,7 @@ impl Packer { if value.is_string() { self.memoise(str_value, map_key, false); - let re = Regex::new(r"^[0-9.]|^~").unwrap(); - if re.is_match(str_value) { + if str_value.starts_with(|c: char| c.is_ascii_digit() || c == '.' || c == '~') { return json!("~".to_owned() + str_value); } } diff --git a/src/unpacker.rs b/src/unpacker.rs index 4a39900..4278a78 100644 --- a/src/unpacker.rs +++ b/src/unpacker.rs @@ -1,8 +1,6 @@ -extern crate regex; extern crate serde; extern crate serde_json; -use self::regex::Regex; use self::serde::Deserialize; use serde_json::Value; use std::collections::HashMap; @@ -17,6 +15,17 @@ const TYPE_VALUE: i64 = 1; const TYPE_STRING: i64 = 2; const MAX_PACK_COMPLEX_OBJECT_SIZE: usize = 12; +fn starts_like_float(string: &str) -> bool { + let rest = string.strip_prefix('-').unwrap_or(string); + let after_digits = rest.trim_start_matches(|c: char| c.is_ascii_digit()); + after_digits.len() < rest.len() && after_digits.starts_with('.') +} + +fn starts_like_number(string: &str) -> bool { + let rest = string.strip_prefix('-').unwrap_or(string); + rest.starts_with(|c: char| c.is_ascii_digit() || c == '.') +} + #[derive(Default, Debug)] pub struct Unpacker { dict: HashMap, @@ -296,8 +305,7 @@ impl Unpacker { } }; - let re = Regex::new(r"^-?[0-9]+\.").unwrap(); - if re.is_match(string) { + if starts_like_float(string) { let _p: Value = match string.parse::() { Ok(parse_number) => { self.add_to_dict(string); @@ -307,8 +315,7 @@ impl Unpacker { }; }; - let re = Regex::new(r"^-?[0-9\.]").unwrap(); - if re.is_match(string) { + if starts_like_number(string) { let _p: Value = match string.parse::() { Ok(parse_number) => { self.add_to_dict(string);