fune/third_party/rust/intl-memoizer/examples/pluralrules.rs
Zibi Braniecki fc2dfec886 Bug 1560038 - Vendor in fluent-rc. r=emilio
--HG--
extra : amend_source : c535f2190b8a11ae36ee8a00278b9c3e1f0c9e71
2020-03-11 08:45:00 +02:00

31 lines
1,009 B
Rust

use intl_memoizer::{IntlMemoizer, Memoizable};
use intl_pluralrules::{PluralCategory, PluralRuleType, PluralRules as IntlPluralRules};
use unic_langid::LanguageIdentifier;
struct PluralRules(pub IntlPluralRules);
impl PluralRules {
pub fn new(lang: LanguageIdentifier, pr_type: PluralRuleType) -> Result<Self, &'static str> {
Ok(Self(IntlPluralRules::create(lang, pr_type)?))
}
}
impl Memoizable for PluralRules {
type Args = (PluralRuleType,);
type Error = &'static str;
fn construct(lang: LanguageIdentifier, args: Self::Args) -> Result<Self, Self::Error> {
Self::new(lang, args.0)
}
}
fn main() {
let mut memoizer = IntlMemoizer::default();
let lang: LanguageIdentifier = "en".parse().unwrap();
let lang_memoizer = memoizer.get_for_lang(lang.clone());
let result = lang_memoizer
.with_try_get::<PluralRules, _, _>((PluralRuleType::CARDINAL,), |pr| pr.0.select(5))
.unwrap();
assert_eq!(result, Ok(PluralCategory::OTHER));
}