facet-singularize
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 singularize;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
Features
- No regex: Uses simple suffix matching and table lookups
- no_std compatible: Works without the standard library (with
allocfeature) - 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:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.