Skip to content

v0.2.0

Choose a tag to compare

@themixednuts themixednuts released this 31 Jul 06:12
· 6 commits to main since this release

Breaking release with correctness fixes, faster lookups, and new feature flags.

Breaking changes

  • QuoteTag is now QuoteStyle; tag codes use NonZeroU8 with unified tag/from_tag naming, so a reserved-zero tag is unrepresentable.
  • IdentStr::from_raw and Key::from_raw are now from_unquoted.
  • Quote delimiter conversions return the new InvalidQuote error instead of ().
  • The Turkic policies moved behind the new unicode-turkic feature (previously part of unicode).
  • Malformed quoted sources whose body is a single unescaped closing delimiter (for example """ or []]) are now kept as raw text instead of parsing as quoted.
  • Short Box<str> inputs to Key are stored inline instead of reusing the allocation.

Fixed

  • ASCII hashing now issues identically chunked writes for policy-equal text, so HashMaps built on chunk-sensitive hashers (FxHash, aHash) can no longer miss lookups for identifiers longer than 64 bytes.

Added

  • KeyStr: borrowed lookup text for allocation-free HashMap/BTreeMap queries, with Borrow/ToOwned wiring to Key.
  • policy::Exact: byte-exact, case-sensitive matching.
  • Key::from_source::<Q> for custom quote styles, and inline (SSO) storage for short keys.
  • serde feature: IdentStr round-trips its quoted source form; Key serializes its lookup text.
  • PartialOrd against str, &str, and String for IdentStr and Key.
  • Doctests across the public API, a Miri CI job, and static auto-trait assertions.

Performance

  • Unicode policies gain byte-equality fast paths and normalize keys directly from borrowed input.
  • Turkic folding keeps borrowed case-fold results and skips normalization of already-NFC input.
  • String inputs spill to Arc/Rc storage with a single copy.

docs.rs now builds with all features and per-feature badges.