| 1 | use fluent_langneg::{negotiate_languages, NegotiationStrategy}; | 
| 2 | use intl_memoizer::Memoizable; | 
|---|
| 3 | use intl_pluralrules::{PluralRuleType, PluralRules as IntlPluralRules}; | 
|---|
| 4 | use unic_langid::LanguageIdentifier; | 
|---|
| 5 |  | 
|---|
| 6 | pub struct PluralRules(pub IntlPluralRules); | 
|---|
| 7 |  | 
|---|
| 8 | impl 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 |  | 
|---|