diff options
Diffstat (limited to 'vendor/icu_provider_adapters/src/fallback')
-rw-r--r-- | vendor/icu_provider_adapters/src/fallback/adapter.rs | 12 | ||||
-rw-r--r-- | vendor/icu_provider_adapters/src/fallback/algorithms.rs | 26 | ||||
-rw-r--r-- | vendor/icu_provider_adapters/src/fallback/mod.rs | 94 |
3 files changed, 94 insertions, 38 deletions
diff --git a/vendor/icu_provider_adapters/src/fallback/adapter.rs b/vendor/icu_provider_adapters/src/fallback/adapter.rs index 4d1f79255..f7cc10fe6 100644 --- a/vendor/icu_provider_adapters/src/fallback/adapter.rs +++ b/vendor/icu_provider_adapters/src/fallback/adapter.rs @@ -35,14 +35,15 @@ use crate::helpers::result_is_err_missing_data_options; /// DataProvider::<HelloWorldV1Marker>::load(&provider, req).expect("successful with vertical fallback"); /// /// assert_eq!( -/// "ja", -/// response.metadata.locale.unwrap().to_string() +/// response.metadata.locale.unwrap(), +/// locale!("ja").into(), /// ); /// assert_eq!( +/// response.payload.unwrap().get().message, /// "こんにちは世界", -/// response.payload.unwrap().get().message /// ); /// ``` +#[derive(Clone)] pub struct LocaleFallbackProvider<P> { inner: P, fallbacker: LocaleFallbacker, @@ -161,6 +162,11 @@ impl<P> LocaleFallbackProvider<P> { &self.inner } + /// Returns a mutable reference to the inner provider. + pub fn inner_mut(&mut self) -> &mut P { + &mut self.inner + } + /// Returns ownership of the inner provider to the caller. pub fn into_inner(self) -> P { self.inner diff --git a/vendor/icu_provider_adapters/src/fallback/algorithms.rs b/vendor/icu_provider_adapters/src/fallback/algorithms.rs index 9af52ef6d..0edc59304 100644 --- a/vendor/icu_provider_adapters/src/fallback/algorithms.rs +++ b/vendor/icu_provider_adapters/src/fallback/algorithms.rs @@ -207,6 +207,7 @@ mod tests { use super::*; use icu_locid::Locale; use std::str::FromStr; + use writeable::Writeable; struct TestCase { input: &'static str, @@ -355,6 +356,25 @@ mod tests { expected_region_chain: &["hi-Latn-IN", "und-IN"], }, TestCase { + input: "zh-CN", + requires_data: true, + extension_key: None, + fallback_supplement: None, + // Note: "zh-Hans" is not reachable because it is the default script for "zh". + // The fallback algorithm does not visit the language-script bundle when the + // script is the default for the language + expected_language_chain: &["zh-CN", "zh"], + expected_region_chain: &["zh-CN", "und-CN"], + }, + TestCase { + input: "zh-TW", + requires_data: true, + extension_key: None, + fallback_supplement: None, + expected_language_chain: &["zh-TW", "zh-Hant-TW", "zh-Hant"], + expected_region_chain: &["zh-TW", "und-TW"], + }, + TestCase { input: "yue-HK", requires_data: true, extension_key: None, @@ -396,10 +416,10 @@ mod tests { }; let locale = DataLocale::from(Locale::from_str(cas.input).unwrap()); let mut it = key_fallbacker.fallback_for(locale); - for expected in expected_chain { + for &expected in expected_chain { assert_eq!( expected, - &it.get().to_string(), + &*it.get().write_to_string(), "{:?} ({:?})", cas.input, priority @@ -408,7 +428,7 @@ mod tests { } assert_eq!( "und", - it.get().to_string(), + &*it.get().write_to_string(), "{:?} ({:?})", cas.input, priority diff --git a/vendor/icu_provider_adapters/src/fallback/mod.rs b/vendor/icu_provider_adapters/src/fallback/mod.rs index 6ec636a09..81adad41c 100644 --- a/vendor/icu_provider_adapters/src/fallback/mod.rs +++ b/vendor/icu_provider_adapters/src/fallback/mod.rs @@ -15,6 +15,7 @@ //! Run the locale fallback algorithm: //! //! ``` +//! use icu_locid::locale; //! use icu_provider_adapters::fallback::LocaleFallbacker; //! use icu_provider::prelude::*; //! @@ -26,20 +27,20 @@ //! let key_fallbacker = fallbacker.for_config(Default::default()); //! //! // Set up the fallback iterator. -//! let mut fallback_iterator = key_fallbacker.fallback_for(icu_locid::locale!("hi-Latn-IN").into()); +//! let mut fallback_iterator = key_fallbacker.fallback_for(DataLocale::from(locale!("hi-Latn-IN"))); //! //! // Run the algorithm and check the results. -//! assert_eq!(fallback_iterator.get().to_string(), "hi-Latn-IN"); +//! assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("hi-Latn-IN"))); //! fallback_iterator.step(); -//! assert_eq!(fallback_iterator.get().to_string(), "hi-Latn"); +//! assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("hi-Latn"))); //! fallback_iterator.step(); -//! assert_eq!(fallback_iterator.get().to_string(), "en-IN"); +//! assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("en-IN"))); //! fallback_iterator.step(); -//! assert_eq!(fallback_iterator.get().to_string(), "en-001"); +//! assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("en-001"))); //! fallback_iterator.step(); -//! assert_eq!(fallback_iterator.get().to_string(), "en"); +//! assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("en"))); //! fallback_iterator.step(); -//! assert_eq!(fallback_iterator.get().to_string(), "und"); +//! assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("und"))); //! ``` use icu_locid::extensions::unicode::{Key, Value}; @@ -67,6 +68,7 @@ pub struct LocaleFallbackConfig { /// Retain the language and script subtags until the final step: /// /// ``` + /// use icu_locid::locale; /// use icu_provider::prelude::*; /// use icu_provider::FallbackPriority; /// use icu_provider_adapters::fallback::LocaleFallbackConfig; @@ -80,21 +82,25 @@ pub struct LocaleFallbackConfig { /// config.priority = FallbackPriority::Language; /// let key_fallbacker = fallbacker.for_config(config); /// let mut fallback_iterator = key_fallbacker - /// .fallback_for(icu_locid::locale!("ca-ES-valencia").into()); + /// .fallback_for(DataLocale::from(locale!("ca-ES-valencia"))); /// /// // Run the algorithm and check the results. - /// assert_eq!(fallback_iterator.get().to_string(), "ca-ES-valencia"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("ca-ES-valencia")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "ca-ES"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("ca-ES"))); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "ca"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("ca"))); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("und"))); /// ``` /// /// Retain the region subtag until the final step: /// /// ``` + /// use icu_locid::locale; /// use icu_provider::prelude::*; /// use icu_provider::FallbackPriority; /// use icu_provider_adapters::fallback::LocaleFallbackConfig; @@ -108,18 +114,27 @@ pub struct LocaleFallbackConfig { /// config.priority = FallbackPriority::Region; /// let key_fallbacker = fallbacker.for_config(config); /// let mut fallback_iterator = key_fallbacker - /// .fallback_for(icu_locid::locale!("ca-ES-valencia").into()); + /// .fallback_for(DataLocale::from(locale!("ca-ES-valencia"))); /// /// // Run the algorithm and check the results. - /// assert_eq!(fallback_iterator.get().to_string(), "ca-ES-valencia"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("ca-ES-valencia")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "ca-ES"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("ca-ES"))); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und-ES-valencia"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("und-ES-valencia")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und-ES"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("und-ES")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("und"))); /// ``` pub priority: FallbackPriority, /// An extension keyword to retain during locale fallback. @@ -127,6 +142,7 @@ pub struct LocaleFallbackConfig { /// # Examples /// /// ``` + /// use icu_locid::locale; /// use icu_provider::prelude::*; /// use icu_provider_adapters::fallback::LocaleFallbackConfig; /// use icu_provider_adapters::fallback::LocaleFallbacker; @@ -139,16 +155,19 @@ pub struct LocaleFallbackConfig { /// config.extension_key = Some(icu_locid::extensions_unicode_key!("nu")); /// let key_fallbacker = fallbacker.for_config(config); /// let mut fallback_iterator = key_fallbacker - /// .fallback_for(icu_locid::locale!("ar-EG-u-nu-latn").into()); + /// .fallback_for(DataLocale::from(locale!("ar-EG-u-nu-latn"))); /// /// // Run the algorithm and check the results. - /// assert_eq!(fallback_iterator.get().to_string(), "ar-EG-u-nu-latn"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("ar-EG-u-nu-latn")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "ar-EG"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("ar-EG"))); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "ar"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("ar"))); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("und"))); /// ``` pub extension_key: Option<Key>, /// Fallback supplement data key to customize fallback rules. @@ -162,6 +181,7 @@ pub struct LocaleFallbackConfig { /// # Examples /// /// ``` + /// use icu_locid::locale; /// use icu_provider::prelude::*; /// use icu_provider::FallbackPriority; /// use icu_provider::FallbackSupplement; @@ -178,17 +198,23 @@ pub struct LocaleFallbackConfig { /// config.fallback_supplement = Some(FallbackSupplement::Collation); /// let key_fallbacker = fallbacker.for_config(config); /// let mut fallback_iterator = - /// key_fallbacker.fallback_for(icu_locid::locale!("yue-HK").into()); + /// key_fallbacker.fallback_for(DataLocale::from(locale!("yue-HK"))); /// /// // Run the algorithm and check the results. /// // TODO(#1964): add "zh" as a target. - /// assert_eq!(fallback_iterator.get().to_string(), "yue-HK"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("yue-HK")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "yue"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("yue"))); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "zh-Hant"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("zh-Hant")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("und"))); /// ``` pub fallback_supplement: Option<FallbackSupplement>, } @@ -303,6 +329,7 @@ impl LocaleFallbacker { /// # Examples /// /// ``` + /// use icu_locid::locale; /// use icu_provider::prelude::*; /// use icu_provider_adapters::fallback::LocaleFallbacker; /// use std::borrow::Cow; @@ -323,14 +350,17 @@ impl LocaleFallbacker { /// .expect("data"); /// let key_fallbacker = fallbacker.for_key(FooV1Marker::KEY); /// let mut fallback_iterator = - /// key_fallbacker.fallback_for(icu_locid::locale!("en-GB").into()); + /// key_fallbacker.fallback_for(DataLocale::from(locale!("en-GB"))); /// /// // Run the algorithm and check the results. - /// assert_eq!(fallback_iterator.get().to_string(), "en-GB"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("en-GB"))); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und-GB"); + /// assert_eq!( + /// fallback_iterator.get(), + /// &DataLocale::from(locale!("und-GB")) + /// ); /// fallback_iterator.step(); - /// assert_eq!(fallback_iterator.get().to_string(), "und"); + /// assert_eq!(fallback_iterator.get(), &DataLocale::from(locale!("und"))); /// ``` /// /// [`DataRequestMetadata`]: icu_provider::DataRequestMetadata |