facet-singularize 0.43.1

Fast, no-regex English singularization for the facet ecosystem
Documentation

facet-singularize

Coverage Status crates.io documentation MIT/Apache-2.0 licensed Discord

Fast, no-regex English singularization.

Overview

This crate converts plural English words to their singular form without using regex. It's designed for use in deserialization where performance matters—for example, when mapping JSON field names like "dependencies" to Rust struct fields like dependency.

Example

use facet_singularize::singularize;

assert_eq!(singularize("dependencies"), "dependency");
assert_eq!(singularize("items"), "item");
assert_eq!(singularize("children"), "child");
assert_eq!(singularize("boxes"), "box");
assert_eq!(singularize("matrices"), "matrix");

Features

  • No regex: Uses simple suffix matching and table lookups
  • no_std compatible: Works without the standard library (with alloc feature)
  • Irregular plurals: Handles common exceptions like children→child, mice→mouse
  • Latin/Greek plurals: Supports -ices→-ix (matrices→matrix), -ae→-a (larvae→larva)

Performance

Benchmarked to be fast enough for hot paths. The implementation prioritizes predictable performance over completeness—it handles the common cases well rather than trying to be a full linguistic library.

Sponsors

Thanks to all individual sponsors:

...along with corporate sponsors:

...without whom this work could not exist.

Special thanks

The facet logo was drawn by Misiasart.

License

Licensed under either of:

at your option.