diff --git a/Cargo.lock b/Cargo.lock index b3cf9e0..c91cfcd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "adler" @@ -401,6 +401,7 @@ dependencies = [ "once_cell", "rand", "regex", + "regex-lite", "ryu", "serde", "serde_json", @@ -498,9 +499,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "parse-zoneinfo" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" dependencies = [ "regex", ] @@ -734,6 +735,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + [[package]] name = "regex-syntax" version = "0.8.3" diff --git a/base/Cargo.toml b/base/Cargo.toml index 0c9bb7d..b002af7 100644 --- a/base/Cargo.toml +++ b/base/Cargo.toml @@ -15,11 +15,17 @@ serde = { version = "1.0", features = ["derive"] } ryu = "1.0" chrono = "0.4" chrono-tz = "0.9" -regex = "1.0" +regex = { version = "1.0", optional = true} +regex-lite = { version = "0.1.6", optional = true} once_cell = "1.16.0" bitcode = "0.6.0" csv = "1.3.0" +[features] +default = ["use_regex_full"] +use_regex_full = ["regex"] +use_regex_lite = ["regex-lite"] + [dev-dependencies] serde_json = "1.0" diff --git a/base/src/functions/util.rs b/base/src/functions/util.rs index 96f1fb8..64dcfe4 100644 --- a/base/src/functions/util.rs +++ b/base/src/functions/util.rs @@ -1,4 +1,5 @@ -use regex::{escape, Regex}; +#[cfg(feature = "use_regex_lite")] +use regex_lite as regex; use crate::{calc_result::CalcResult, expressions::token::is_english_error_string}; @@ -86,7 +87,7 @@ pub(crate) fn from_wildcard_to_regex( exact: bool, ) -> Result { // 1. Escape all - let reg = &escape(wildcard); + let reg = ®ex::escape(wildcard); // 2. We convert the escaped '?' into '.' (matches a single character) let reg = ®.replace("\\?", "."); @@ -109,9 +110,9 @@ pub(crate) fn from_wildcard_to_regex( // And we have a valid Perl regex! (As Kim Kardashian said before me: "I know, right?") if exact { - return Regex::new(&format!("^{}$", reg)); + return regex::Regex::new(&format!("^{}$", reg)); } - Regex::new(reg) + regex::Regex::new(reg) } /// NUMBERS /// @@ -203,7 +204,7 @@ fn result_is_not_equal_to_bool(calc_result: &CalcResult, target: bool) -> bool { /// Note that strings are case insensitive. `target` must always be lower case. -pub(crate) fn result_matches_regex(calc_result: &CalcResult, reg: &Regex) -> bool { +pub(crate) fn result_matches_regex(calc_result: &CalcResult, reg: ®ex::Regex) -> bool { match calc_result { CalcResult::String(s) => reg.is_match(&s.to_lowercase()), _ => false, diff --git a/bindings/wasm/Cargo.toml b/bindings/wasm/Cargo.toml index 6f469ed..71155a0 100644 --- a/bindings/wasm/Cargo.toml +++ b/bindings/wasm/Cargo.toml @@ -14,7 +14,7 @@ crate-type = ["cdylib"] # Uses `../ironcalc/base` when used locally, and uses # the inicated version from crates.io when published. # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#multiple-locations -ironcalc_base = { path = "../../base", version = "0.2" } +ironcalc_base = { path = "../../base", version = "0.2", features = ["use_regex_lite"] } serde = { version = "1.0", features = ["derive"] } wasm-bindgen = "0.2.92" serde-wasm-bindgen = "0.4"