facet-singularize

Crates.iofacet-singularize
lib.rsfacet-singularize
version0.43.1
created_at2025-12-11 16:53:19.661669+00
updated_at2026-01-23 08:49:33.099546+00
descriptionFast, no-regex English singularization for the facet ecosystem
homepagehttps://facet.rs
repositoryhttps://github.com/facet-rs/facet
max_upload_size
id1980105
size87,478
Amos Wenger (fasterthanlime)

documentation

README

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:

GitHub Sponsors Patreon

...along with corporate sponsors:

AWS Zed Depot

...without whom this work could not exist.

Special thanks

The facet logo was drawn by Misiasart.

License

Licensed under either of:

at your option.

Commit count: 3380

cargo fmt