1use fluent_langneg::{negotiate_languages, NegotiationStrategy};
2use intl_memoizer::Memoizable;
3use intl_pluralrules::{PluralRuleType, PluralRules as IntlPluralRules};
4use unic_langid::LanguageIdentifier;
5
6pub struct PluralRules(pub IntlPluralRules);
7
8impl Memoizable for PluralRules {
9 type Args = (PluralRuleType,);
10 type Error = &'static str;
11 fn construct(lang: LanguageIdentifier, args: Self::Args) -> Result<Self, Self::Error> {
12 let default_lang: LanguageIdentifier = "en".parse().unwrap();
13 let pr_lang: LanguageIdentifier = negotiate_languages&LanguageIdentifier(
14 &[lang],
15 &IntlPluralRules::get_locales(args.0),
16 default:Some(&default_lang),
17 strategy:NegotiationStrategy::Lookup,
18 )[0]
19 .clone();
20 Ok(Self(IntlPluralRules::create(langid:pr_lang, prt:args.0)?))
21 }
22}
23