diff --git a/Cargo.toml b/Cargo.toml index 384b080..dde741d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "plurify" -version = "0.2.1" +version = "0.1.0" edition = "2021" license = "MIT" diff --git a/README.md b/README.md index db504e5..bab2732 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,9 @@ # plurify ![Build](https://github.com/YGGverse/plurify/actions/workflows/build.yml/badge.svg) -[![Documentation](https://docs.rs/plurify/badge.svg)](https://docs.rs/plurify) -[![crates.io](https://img.shields.io/crates/v/plurify.svg)](https://crates.io/crates/plurify) Pluralize words in different locales -* [Documentation](https://docs.rs/plurify) - ## Install ``` bash @@ -17,16 +13,16 @@ cargo add plurify ## Usage ``` rust -use plurify::*; +use plurify::ns; let en = &["cat", "cats", "cats"]; let uk = &["кіт", "кота", "котів"]; -assert_eq!(1.plurify(en), "cat"); -assert_eq!(2.plurify(en), "cats"); -assert_eq!(5.plurify(en), "cats"); +assert_eq!(ns(1, en), "cat"); +assert_eq!(ns(2, en), "cats"); +assert_eq!(ns(5, en), "cats"); -assert_eq!(1.plurify(uk), "кіт"); -assert_eq!(2.plurify(uk), "кота"); -assert_eq!(5.plurify(uk), "котів"); +assert_eq!(ns(1, uk), "кіт"); +assert_eq!(ns(2, uk), "кота"); +assert_eq!(ns(5, uk), "котів"); ``` \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 7bccda8..f09654c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,55 +1,24 @@ -// Functions - -/// Get plural string `s` for number `n` +/// Get plural string `s` match number `n` /// /// ## Example /// ``` rust -/// use plurify::*; +/// use plurify::ns; /// /// let en = &["cat", "cats", "cats"]; /// let uk = &["кіт", "кота", "котів"]; /// -/// assert_eq!(plurify(1, en), "cat"); -/// assert_eq!(plurify(2, en), "cats"); -/// assert_eq!(plurify(5, en), "cats"); +/// assert_eq!(ns(1, en), "cat"); +/// assert_eq!(ns(2, en), "cats"); +/// assert_eq!(ns(5, en), "cats"); /// -/// assert_eq!(plurify(1, uk), "кіт"); -/// assert_eq!(plurify(2, uk), "кота"); -/// assert_eq!(plurify(5, uk), "котів"); +/// assert_eq!(ns(1, uk), "кіт"); +/// assert_eq!(ns(2, uk), "кота"); +/// assert_eq!(ns(5, uk), "котів"); /// ``` -pub fn plurify<'a>(n: usize, s: &[&'a str]) -> &'a str { - s[if n % 100 > 4 && n % 100 < 20 { +pub fn ns<'a>(n: usize, s: &[&'a str]) -> &'a str { + s[if (n % 100) > 4 && (n % 100) < 20 { 2 } else { - [2, 0, 1, 1, 1, 2][usize::min(n % 10, 5)] + [2, 0, 1, 1, 1, 2][std::cmp::min(n % 10, 5)] }] } - -// Traits - -pub trait Plurify { - fn plurify<'a>(self, s: &[&'a str]) -> &'a str; -} - -impl Plurify for usize { - /// Get plural string for `usize` value - /// - /// ## Example - /// ``` rust - /// use plurify::*; - /// - /// let en = &["cat", "cats", "cats"]; - /// let uk = &["кіт", "кота", "котів"]; - /// - /// assert_eq!(1.plurify(en), "cat"); - /// assert_eq!(2.plurify(en), "cats"); - /// assert_eq!(5.plurify(en), "cats"); - /// - /// assert_eq!(1.plurify(uk), "кіт"); - /// assert_eq!(2.plurify(uk), "кота"); - /// assert_eq!(5.plurify(uk), "котів"); - /// ``` - fn plurify<'a>(self, s: &[&'a str]) -> &'a str { - plurify(self, s) - } -} diff --git a/tests/integration.rs b/tests/integration.rs index 81eb0de..957a0bb 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -1,24 +1,15 @@ -#[cfg(test)] -use plurify::*; +use plurify::ns; #[test] -fn test() { +fn _ns() { let en = &["cat", "cats", "cats"]; let uk = &["кіт", "кота", "котів"]; - assert_eq!(plurify(1, en), "cat"); - assert_eq!(plurify(2, en), "cats"); - assert_eq!(plurify(5, en), "cats"); + assert_eq!(ns(1, en), "cat"); + assert_eq!(ns(2, en), "cats"); + assert_eq!(ns(5, en), "cats"); - assert_eq!(plurify(1, uk), "кіт"); - assert_eq!(plurify(2, uk), "кота"); - assert_eq!(plurify(5, uk), "котів"); - - assert_eq!(1.plurify(en), "cat"); - assert_eq!(2.plurify(en), "cats"); - assert_eq!(5.plurify(en), "cats"); - - assert_eq!(1.plurify(uk), "кіт"); - assert_eq!(2.plurify(uk), "кота"); - assert_eq!(5.plurify(uk), "котів"); + assert_eq!(ns(1, uk), "кіт"); + assert_eq!(ns(2, uk), "кота"); + assert_eq!(ns(5, uk), "котів"); }