summaryrefslogtreecommitdiffstats
path: root/vendor/icu_provider
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--vendor/icu_provider/.cargo-checksum.json2
-rw-r--r--vendor/icu_provider/Cargo.toml49
-rw-r--r--vendor/icu_provider/README.md2
-rw-r--r--vendor/icu_provider/src/any.rs60
-rw-r--r--vendor/icu_provider/src/buf.rs6
-rw-r--r--vendor/icu_provider/src/constructors.rs6
-rw-r--r--vendor/icu_provider/src/datagen/mod.rs2
-rw-r--r--vendor/icu_provider/src/error.rs12
-rw-r--r--vendor/icu_provider/src/hello_world.rs2
-rw-r--r--vendor/icu_provider/src/key.rs6
-rw-r--r--vendor/icu_provider/src/lib.rs2
-rw-r--r--vendor/icu_provider/src/request.rs40
-rw-r--r--vendor/icu_provider/src/response.rs10
-rw-r--r--vendor/icu_provider/src/serde/mod.rs18
-rw-r--r--vendor/icu_provider_adapters/.cargo-checksum.json2
-rw-r--r--vendor/icu_provider_adapters/Cargo.toml28
-rw-r--r--vendor/icu_provider_adapters/src/empty.rs23
-rw-r--r--vendor/icu_provider_adapters/src/fallback/adapter.rs12
-rw-r--r--vendor/icu_provider_adapters/src/fallback/algorithms.rs26
-rw-r--r--vendor/icu_provider_adapters/src/fallback/mod.rs94
-rw-r--r--vendor/icu_provider_adapters/src/fork/by_error.rs39
-rw-r--r--vendor/icu_provider_macros/.cargo-checksum.json2
-rw-r--r--vendor/icu_provider_macros/Cargo.toml2
-rw-r--r--vendor/icu_provider_macros/src/lib.rs2
-rw-r--r--vendor/icu_provider_macros/src/tests.rs2
25 files changed, 293 insertions, 156 deletions
diff --git a/vendor/icu_provider/.cargo-checksum.json b/vendor/icu_provider/.cargo-checksum.json
index fd85bb931..079ffc8f3 100644
--- a/vendor/icu_provider/.cargo-checksum.json
+++ b/vendor/icu_provider/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"2b5b03ef885db4858645deae855ec7347fda3b8b18ce326521d11dd5fa5e7f0d","LICENSE":"4ad7541d66a407234e2c84902124cef325c29f3e966353efdb800bedb8b8da21","README.md":"97887d230a6a85aa40110bf2bb9356a69b8762f64bdbf66d019f2cdf9f8fee0e","src/any.rs":"f347c91b6ad34d330d69e60f276716c595c32ca7abf591340ba659a54ba73415","src/buf.rs":"ed8d68fc8facae65294f648bca8dad2ad6e75fbea6250212a2f6fc8f1147a015","src/constructors.rs":"895162fc4f3ceeff9236a765b6caf41a343794af2fc0d9cc686487e6980ff111","src/data_provider.rs":"088fa10caeec785777366d543d8622ae4ac52fa0721de25281456d8346371e56","src/datagen/data_conversion.rs":"21c21bb300557f158f77155397a023e1eda22413d66ac0c4f8ce04184fd90b20","src/datagen/heap_measure.rs":"14f3224d071d0c9695720b53257a60da19c3355c4bff272f9a9e3c3a9711f27a","src/datagen/iter.rs":"6353ec6476596ae6dfd5aee5f3f420c3a1c1c6e71911fa7dae49e17564e1930f","src/datagen/mod.rs":"0ed8676ad23d5acf622b9b971195c44976eaa41320f86627ad2c3f506c064d4e","src/datagen/payload.rs":"d9b1e5ceb07bdadc01d200f712b556d37a325cfad8fc6c7c17ceecaab4ef57e2","src/dynutil.rs":"bff12a7000298a1f46c98bb66f94492a88f9111afb59e8accea6b83d95e83af2","src/error.rs":"d01b45212c1c3bf5e904c631a26d0c5f91802575e55675f73d3591a1d0da8f25","src/hello_world.rs":"57fd467793374d66ed05982ae04b72983b3d67744fa81cf7ddde1174d1d2e741","src/helpers.rs":"1712d389dfda2a9c2d5d973f212209ecb4a16f27998d893a2f1a4cf96cb44e10","src/key.rs":"286d271012fc2eb8b34bfa843a5783b4a3ce5a1e23a63234ca11a8f82f2c13cc","src/lib.rs":"26b72a010db444d339d3803b7e598842efe52fff97b56fb3c6ddf632fc70ecdc","src/marker.rs":"58d770fb28e696c33192b9ecc5a86e1dca01f206d62656b45787375d69168852","src/request.rs":"141b12da429c5dcc2577d0911a4b09b6d579d173510eac6d3cd997fd986020f4","src/response.rs":"71e078dabcc91c822c315ae89f499b7d9724b40addc89786320ca658979e2f6c","src/serde/borrow_de_utils.rs":"30936d0ac69a9edc1a4935dcf777f1c1161d3f8d8d3a997b80744cf6c62bc4b5","src/serde/mod.rs":"b7033686b2f6d72fbdab6388b65c29651fd3b6ac45a37981421dab03a73c5ef5"},"package":"2f911086e3c521a8a824d4f8bfd87769645ced2f07ff913b521c0d793be07100"} \ No newline at end of file
+{"files":{"Cargo.toml":"5eb9543e4ba0986f30237d8e026704143a75c1d197292f370294abd5a45bd10b","LICENSE":"4ad7541d66a407234e2c84902124cef325c29f3e966353efdb800bedb8b8da21","README.md":"bb2790cbf8d6109a07f4f0fe38aedfba0258637b1a28e67d35057eb57362fc41","src/any.rs":"7a6678e693e6090ebee04366dcf47a0449ce9006cca1f2ac429bd87eb9a0bbf2","src/buf.rs":"c1cb09ef992f6cefb65c8a0131d3f1e30332f093bd714429bba67e82fc3ee145","src/constructors.rs":"bbb8e0b82d8be54b6992d82df6738c20468e97af5910a22ceda437415ece9c13","src/data_provider.rs":"088fa10caeec785777366d543d8622ae4ac52fa0721de25281456d8346371e56","src/datagen/data_conversion.rs":"21c21bb300557f158f77155397a023e1eda22413d66ac0c4f8ce04184fd90b20","src/datagen/heap_measure.rs":"14f3224d071d0c9695720b53257a60da19c3355c4bff272f9a9e3c3a9711f27a","src/datagen/iter.rs":"6353ec6476596ae6dfd5aee5f3f420c3a1c1c6e71911fa7dae49e17564e1930f","src/datagen/mod.rs":"47e5b36432d27af3ff2662efceebe7dfb9b875f776e162dc547bb8ce2893e3a3","src/datagen/payload.rs":"d9b1e5ceb07bdadc01d200f712b556d37a325cfad8fc6c7c17ceecaab4ef57e2","src/dynutil.rs":"bff12a7000298a1f46c98bb66f94492a88f9111afb59e8accea6b83d95e83af2","src/error.rs":"c25cf6969feb7097edfc831a7d1aa6a3e3ba31c97e637f8f382bd3ec7905d5a7","src/hello_world.rs":"ff99a920ca8ef84d29129f1c8563fa96e963848532f9dbbddd02d634b8d6c0fb","src/helpers.rs":"1712d389dfda2a9c2d5d973f212209ecb4a16f27998d893a2f1a4cf96cb44e10","src/key.rs":"59d2d89107a24ee3f92f085715a1ba8c1222eced384969534fbcd43c68e2a658","src/lib.rs":"dcae8affb71e51095eab6180e08194e87a5aa6e339b8f3f18c4e1ce45a8c714a","src/marker.rs":"58d770fb28e696c33192b9ecc5a86e1dca01f206d62656b45787375d69168852","src/request.rs":"9ab23e38f941a4abc54be028888db6e787557088fc290d67b4f112db77c45521","src/response.rs":"9d93b42a1dda53f71195f1371c8a0a50755488af1fa20262fb703d60a6e1359e","src/serde/borrow_de_utils.rs":"30936d0ac69a9edc1a4935dcf777f1c1161d3f8d8d3a997b80744cf6c62bc4b5","src/serde/mod.rs":"a65937b6501a8106ae6036a7ba09977707b5268d2a6bdc3f2e43088610170da8"},"package":"a86816c97bc4e613086497f9479f63e120315e056763e8c4435604f98d21d82d"} \ No newline at end of file
diff --git a/vendor/icu_provider/Cargo.toml b/vendor/icu_provider/Cargo.toml
index 4ed67b0c0..84f561096 100644
--- a/vendor/icu_provider/Cargo.toml
+++ b/vendor/icu_provider/Cargo.toml
@@ -12,7 +12,7 @@
[package]
edition = "2021"
name = "icu_provider"
-version = "1.0.1"
+version = "1.1.0"
authors = ["The ICU4X Project Developers"]
include = [
"src/**/*",
@@ -30,23 +30,18 @@ license = "Unicode-DFS-2016"
repository = "https://github.com/unicode-org/icu4x"
resolver = "2"
-[package.metadata.cargo-all-features]
-skip_optional_dependencies = true
-denylist = [
- "bench",
- "macros",
-]
-extra_features = ["serde"]
-
[package.metadata.docs.rs]
all-features = true
+[package.metadata.cargo-all-features]
+denylist = ["macros"]
+
[dependencies.bincode]
version = "1.3"
optional = true
[dependencies.databake]
-version = "0.1.0"
+version = "0.1.3"
features = ["derive"]
optional = true
@@ -65,10 +60,10 @@ optional = true
default-features = false
[dependencies.icu_locid]
-version = "1.0.0"
+version = "1.1.0"
[dependencies.icu_provider_macros]
-version = "1.0.0"
+version = "1.1.0"
optional = true
[dependencies.log]
@@ -100,53 +95,47 @@ version = "1.2.0"
default-features = false
[dependencies.writeable]
-version = "0.5"
+version = "0.5.1"
[dependencies.yoke]
-version = "0.6.2"
+version = "0.7.0"
features = ["derive"]
[dependencies.zerofrom]
-version = "0.1.0"
+version = "0.1.1"
features = ["derive"]
[dependencies.zerovec]
-version = "0.9"
+version = "0.9.2"
features = ["derive"]
[dev-dependencies.serde_json]
version = "1.0"
-[dev-dependencies.static_assertions]
-version = "1.1"
-
[features]
datagen = [
- "dhat",
+ "dep:dhat",
"serde",
- "erased-serde",
- "databake",
+ "dep:erased-serde",
+ "dep:databake",
"std",
- "serde_json",
"sync",
- "yoke/serde",
]
-default = []
deserialize_bincode_1 = [
"serde",
- "bincode",
+ "dep:bincode",
"std",
]
deserialize_json = [
"serde",
- "serde_json",
+ "dep:serde_json",
]
deserialize_postcard_1 = [
"serde",
- "postcard",
+ "dep:postcard",
]
-log_error_context = ["log"]
-macros = ["icu_provider_macros"]
+log_error_context = ["dep:log"]
+macros = ["dep:icu_provider_macros"]
serde = [
"dep:serde",
"yoke/serde",
diff --git a/vendor/icu_provider/README.md b/vendor/icu_provider/README.md
index 19d73a1a2..5692fa6b3 100644
--- a/vendor/icu_provider/README.md
+++ b/vendor/icu_provider/README.md
@@ -92,7 +92,7 @@ structs to borrow zero-copy data.
### Data generation API
-*This functionality is enabled with the "datagen" feature*
+*This functionality is enabled with the "datagen" Cargo feature*
The [`datagen`] module contains several APIs for data generation. See [`icu_datagen`] for the reference
data generation implementation.
diff --git a/vendor/icu_provider/src/any.rs b/vendor/icu_provider/src/any.rs
index 1c7a60435..989438c6b 100644
--- a/vendor/icu_provider/src/any.rs
+++ b/vendor/icu_provider/src/any.rs
@@ -18,7 +18,7 @@ use alloc::rc::Rc as SelectedRc;
use alloc::sync::Arc as SelectedRc;
/// A trait that allows to specify `Send + Sync` bounds that are only required when
-/// the `sync` feature is enabled. Without the feature, this is an empty bound.
+/// the `sync` Cargo feature is enabled. Without the Cargo feature, this is an empty bound.
#[cfg(feature = "sync")]
pub trait MaybeSendSync: Send + Sync {}
#[cfg(feature = "sync")]
@@ -115,6 +115,19 @@ impl AnyPayload {
}
}
+ /// Clones and then transforms a type-erased `AnyPayload` into a concrete `DataPayload<M>`.
+ pub fn downcast_cloned<M>(&self) -> Result<DataPayload<M>, DataError>
+ where
+ M: DataMarker + 'static,
+ // For the StructRef case:
+ M::Yokeable: ZeroFrom<'static, M::Yokeable>,
+ // For the PayloadRc case:
+ M::Yokeable: MaybeSendSync,
+ for<'a> YokeTraitHack<<M::Yokeable as Yokeable<'a>>::Output>: Clone,
+ {
+ self.clone().downcast()
+ }
+
/// Creates an `AnyPayload` from a static reference to a data struct.
///
/// # Examples
@@ -230,7 +243,7 @@ impl From<AnyResponse> for DataResponse<AnyMarker> {
}
impl AnyResponse {
- /// Transforms a type-erased `DataResponse<AnyMarker>` into a concrete `DataResponse<M>`.
+ /// Transforms a type-erased `AnyResponse` into a concrete `DataResponse<M>`.
#[inline]
pub fn downcast<M>(self) -> Result<DataResponse<M>, DataError>
where
@@ -244,6 +257,39 @@ impl AnyResponse {
payload: self.payload.map(|p| p.downcast()).transpose()?,
})
}
+
+ /// Clones and then transforms a type-erased `AnyResponse` into a concrete `DataResponse<M>`.
+ pub fn downcast_cloned<M>(&self) -> Result<DataResponse<M>, DataError>
+ where
+ M: DataMarker + 'static,
+ M::Yokeable: ZeroFrom<'static, M::Yokeable>,
+ M::Yokeable: MaybeSendSync,
+ for<'a> YokeTraitHack<<M::Yokeable as Yokeable<'a>>::Output>: Clone,
+ {
+ Ok(DataResponse {
+ metadata: self.metadata.clone(),
+ payload: self
+ .payload
+ .as_ref()
+ .map(|p| p.downcast_cloned())
+ .transpose()?,
+ })
+ }
+}
+
+impl<M> DataResponse<M>
+where
+ M: DataMarker + 'static,
+ M::Yokeable: MaybeSendSync,
+{
+ /// Moves the inner DataPayload to the heap (requiring an allocation) and returns it as an
+ /// erased `AnyResponse`.
+ pub fn wrap_into_any_response(self) -> AnyResponse {
+ AnyResponse {
+ metadata: self.metadata,
+ payload: self.payload.map(|p| p.wrap_into_any_payload()),
+ }
+ }
}
/// An object-safe data provider that returns data structs cast to `dyn Any` trait objects.
@@ -345,7 +391,10 @@ where
{
#[inline]
fn load(&self, req: DataRequest) -> Result<DataResponse<M>, DataError> {
- self.0.load_any(M::KEY, req)?.downcast()
+ self.0
+ .load_any(M::KEY, req)?
+ .downcast()
+ .map_err(|e| e.with_req(M::KEY, req))
}
}
@@ -359,7 +408,10 @@ where
{
#[inline]
fn load_data(&self, key: DataKey, req: DataRequest) -> Result<DataResponse<M>, DataError> {
- self.0.load_any(key, req)?.downcast()
+ self.0
+ .load_any(key, req)?
+ .downcast()
+ .map_err(|e| e.with_req(key, req))
}
}
diff --git a/vendor/icu_provider/src/buf.rs b/vendor/icu_provider/src/buf.rs
index 73bc0f165..796ad32f3 100644
--- a/vendor/icu_provider/src/buf.rs
+++ b/vendor/icu_provider/src/buf.rs
@@ -21,7 +21,11 @@ impl DataMarker for BufferMarker {
///
/// Generally, these bytes are expected to be deserializable with Serde. To get an object
/// implementing [`DataProvider`] via Serde, use [`as_deserializing()`], which requires
-/// enabling at least one of the Serde features.
+/// enabling at least one of the deserialization Cargo features:
+///
+/// - `deserialize_json`
+/// - `deserialize_postcard_1`
+/// - `deserialize_bincode_1`
///
/// Along with [`DataProvider`], this is one of the two foundational traits in this crate.
///
diff --git a/vendor/icu_provider/src/constructors.rs b/vendor/icu_provider/src/constructors.rs
index a9330c3f2..053da0320 100644
--- a/vendor/icu_provider/src/constructors.rs
+++ b/vendor/icu_provider/src/constructors.rs
@@ -54,7 +54,7 @@
//! 2. [`FsDataProvider`]
//! 3. [`ForkByKeyProvider`] between any of the above
//!
-//! Please note that you must enable the `"serde"` feature on each crate in which you use the
+//! Please note that you must enable the `"serde"` Cargo feature on each crate in which you use the
//! `*_with_buffer_provider` constructor.
//!
//! # Data Versioning Policy
@@ -78,8 +78,8 @@
//! Over FFI, there is only one data provider type: [`ICU4XDataProvider`]. Internally, it is an
//! `enum` between `dyn `[`AnyProvider`] and `dyn `[`BufferProvider`].
//!
-//! To control for code size, there are two features, `any_provider` and `buffer_provider`, that
-//! enable the corresponding items in the enum.
+//! To control for code size, there are two Cargo features, `any_provider` and `buffer_provider`,
+//! that enable the corresponding items in the enum.
//!
//! In Rust ICU4X, a similar buffer/any enum approach was not taken because:
//!
diff --git a/vendor/icu_provider/src/datagen/mod.rs b/vendor/icu_provider/src/datagen/mod.rs
index 5ede82275..e52a19c4d 100644
--- a/vendor/icu_provider/src/datagen/mod.rs
+++ b/vendor/icu_provider/src/datagen/mod.rs
@@ -6,7 +6,7 @@
//! via the `icu_datagen` reference crate. End users should not need to consume anything in
//! this module as a library unless defining new types that integrate with `icu_datagen`.
//!
-//! This module can be enabled with the `datagen` feature on `icu_provider`.
+//! This module can be enabled with the `datagen` Cargo feature on `icu_provider`.
mod data_conversion;
mod heap_measure;
diff --git a/vendor/icu_provider/src/error.rs b/vendor/icu_provider/src/error.rs
index 39bd1d0bb..05a48f9b7 100644
--- a/vendor/icu_provider/src/error.rs
+++ b/vendor/icu_provider/src/error.rs
@@ -64,8 +64,8 @@ pub enum DataErrorKind {
MissingSourceData,
/// An error indicating that the desired buffer format is not available. This usually
- /// means that a required feature was not enabled
- #[displaydoc("Unavailable buffer format: {0:?} (does icu_provider need to be compiled with an additional feature?)")]
+ /// means that a required Cargo feature was not enabled
+ #[displaydoc("Unavailable buffer format: {0:?} (does icu_provider need to be compiled with an additional Cargo feature?)")]
UnavailableBufferFormat(BufferFormat),
}
@@ -196,7 +196,7 @@ impl DataError {
/// Logs the data error with the given request, returning an error containing the resource key.
///
- /// If the "log_error_context" feature is enabled, this logs the whole request. Either way,
+ /// If the "log_error_context" Cargo feature is enabled, this logs the whole request. Either way,
/// it returns an error with the resource key portion of the request as context.
#[cfg_attr(not(feature = "log_error_context"), allow(unused_variables))]
pub fn with_req(self, key: DataKey, req: DataRequest) -> Self {
@@ -210,7 +210,7 @@ impl DataError {
/// Logs the data error with the given context, then return self.
///
- /// This does not modify the error, but if the "log_error_context" feature is enabled,
+ /// This does not modify the error, but if the "log_error_context" Cargo feature is enabled,
/// it will print out the context.
#[cfg(feature = "std")]
#[cfg_attr(not(feature = "log_error_context"), allow(unused_variables))]
@@ -222,7 +222,7 @@ impl DataError {
/// Logs the data error with the given context, then return self.
///
- /// This does not modify the error, but if the "log_error_context" feature is enabled,
+ /// This does not modify the error, but if the "log_error_context" Cargo feature is enabled,
/// it will print out the context.
#[cfg_attr(not(feature = "log_error_context"), allow(unused_variables))]
#[inline]
@@ -234,7 +234,7 @@ impl DataError {
/// Logs the data error with the given context, then return self.
///
- /// This does not modify the error, but if the "log_error_context" feature is enabled,
+ /// This does not modify the error, but if the "log_error_context" Cargo feature is enabled,
/// it will print out the context.
#[cfg_attr(not(feature = "log_error_context"), allow(unused_variables))]
#[inline]
diff --git a/vendor/icu_provider/src/hello_world.rs b/vendor/icu_provider/src/hello_world.rs
index 5fa671d84..7fd8289df 100644
--- a/vendor/icu_provider/src/hello_world.rs
+++ b/vendor/icu_provider/src/hello_world.rs
@@ -266,6 +266,8 @@ impl<'l> Writeable for FormattedHelloWorld<'l> {
}
}
+writeable::impl_display_with_writeable!(FormattedHelloWorld<'_>);
+
#[cfg(feature = "datagen")]
impl IterableDataProvider<HelloWorldV1Marker> for HelloWorldProvider {
fn supported_locales(&self) -> Result<Vec<DataLocale>, DataError> {
diff --git a/vendor/icu_provider/src/key.rs b/vendor/icu_provider/src/key.rs
index 2f55e4d46..d4d6905c9 100644
--- a/vendor/icu_provider/src/key.rs
+++ b/vendor/icu_provider/src/key.rs
@@ -140,11 +140,6 @@ impl DataKeyPath {
/// Gets the path as a static string slice.
#[inline]
pub const fn get(self) -> &'static str {
- /// core::slice::from_raw_parts(a, b) = core::mem::transmute((a, b)) hack
- /// ```compile_fail
- /// const unsafe fn canary() { core::slice::from_raw_parts(0 as *const u8, 0); }
- /// ```
- const _: () = ();
unsafe {
// Safe due to invariant that self.path is tagged correctly
core::str::from_utf8_unchecked(core::mem::transmute((
@@ -624,7 +619,6 @@ fn test_key_to_string() {
expected: "core/cardinal@65535",
},
] {
- assert_eq!(cas.expected, cas.key.to_string());
writeable::assert_writeable_eq!(&cas.key, cas.expected);
}
}
diff --git a/vendor/icu_provider/src/lib.rs b/vendor/icu_provider/src/lib.rs
index 594e872f4..7ee5b34e2 100644
--- a/vendor/icu_provider/src/lib.rs
+++ b/vendor/icu_provider/src/lib.rs
@@ -94,7 +94,7 @@
//!
//! ## Data generation API
//!
-//! *This functionality is enabled with the "datagen" feature*
+//! *This functionality is enabled with the "datagen" Cargo feature*
//!
//! The [`datagen`] module contains several APIs for data generation. See [`icu_datagen`] for the reference
//! data generation implementation.
diff --git a/vendor/icu_provider/src/request.rs b/vendor/icu_provider/src/request.rs
index 7f6bb5911..5f51f3a2c 100644
--- a/vendor/icu_provider/src/request.rs
+++ b/vendor/icu_provider/src/request.rs
@@ -53,11 +53,11 @@ pub struct DataRequestMetadata;
/// use icu_locid::locale;
/// use icu_provider::DataLocale;
///
-/// let locale1 = locale!("en-u-ca-buddhist");
-/// let data_locale = DataLocale::from(locale1);
-/// let locale2 = data_locale.into_locale();
+/// let locale = locale!("en-u-ca-buddhist");
+/// let data_locale = DataLocale::from(locale);
+/// let locale = data_locale.into_locale();
///
-/// assert_eq!(locale2.to_string(), "en-u-ca-buddhist");
+/// assert_eq!(locale, locale!("en-u-ca-buddhist"));
/// ```
///
/// You can alternatively create a [`DataLocale`] from a borrowed [`Locale`], which is more
@@ -81,18 +81,18 @@ pub struct DataRequestMetadata;
/// use icu_locid::langid;
/// use icu_provider::DataLocale;
///
-/// let langid1 = langid!("es-CA-valencia");
-/// let data_locale = DataLocale::from(langid1);
-/// let langid2 = data_locale.get_langid();
+/// let langid = langid!("es-CA-valencia");
+/// let data_locale = DataLocale::from(langid);
+/// let langid = data_locale.get_langid();
///
-/// assert_eq!(langid2.to_string(), "es-CA-valencia");
+/// assert_eq!(langid, langid!("es-CA-valencia"));
/// ```
///
/// [`DataLocale`] only supports `-u` keywords, to reflect the current state of CLDR data
/// lookup and fallback. This may change in the future.
///
/// ```
-/// use icu_locid::Locale;
+/// use icu_locid::{locale, Locale};
/// use icu_provider::DataLocale;
///
/// let locale = "hi-t-en-h0-hybrid-u-attr-ca-buddhist"
@@ -100,7 +100,7 @@ pub struct DataRequestMetadata;
/// .unwrap();
/// let data_locale = DataLocale::from(locale);
///
-/// assert_eq!(data_locale.to_string(), "hi-u-ca-buddhist");
+/// assert_eq!(data_locale.into_locale(), locale!("hi-u-ca-buddhist"));
/// ```
#[derive(PartialEq, Clone, Default, Eq, Hash)]
pub struct DataLocale {
@@ -225,7 +225,6 @@ impl DataLocale {
/// let b = ab[1];
/// assert!(a.cmp(b) == Ordering::Less);
/// let a_loc: DataLocale = a.parse::<Locale>().unwrap().into();
- /// assert_eq!(a, a_loc.to_string());
/// assert!(
/// a_loc.strict_cmp(a.as_bytes()) == Ordering::Equal,
/// "{} == {}",
@@ -239,7 +238,6 @@ impl DataLocale {
/// b
/// );
/// let b_loc: DataLocale = b.parse::<Locale>().unwrap().into();
- /// assert_eq!(b, b_loc.to_string());
/// assert!(
/// b_loc.strict_cmp(b.as_bytes()) == Ordering::Equal,
/// "{} == {}",
@@ -338,21 +336,20 @@ impl DataLocale {
///
/// ```
/// use icu_locid::{
- /// langid, subtags_language as language, subtags_region as region, Locale,
+ /// langid, locale, subtags_language as language, subtags_region as region,
+ /// Locale,
/// };
/// use icu_provider::prelude::*;
///
- /// let locale: Locale = "it-IT-u-ca-coptic".parse().expect("Valid BCP-47");
- /// let locale: DataLocale = locale.into();
+ /// let locale: DataLocale = locale!("it-IT-u-ca-coptic").into();
///
- /// assert_eq!(locale.to_string(), "it-IT-u-ca-coptic");
/// assert_eq!(locale.get_langid(), langid!("it-IT"));
/// assert_eq!(locale.language(), language!("it"));
/// assert_eq!(locale.script(), None);
/// assert_eq!(locale.region(), Some(region!("IT")));
///
/// let locale = locale.into_locale();
- /// assert_eq!(locale.to_string(), "it-IT-u-ca-coptic");
+ /// assert_eq!(locale, locale!("it-IT-u-ca-coptic"));
/// ```
pub fn into_locale(self) -> Locale {
let mut loc = Locale {
@@ -488,6 +485,8 @@ impl DataLocale {
#[test]
fn test_data_locale_to_string() {
+ use icu_locid::locale;
+
struct TestCase {
pub locale: DataLocale,
pub expected: &'static str,
@@ -499,15 +498,14 @@ fn test_data_locale_to_string() {
expected: "und",
},
TestCase {
- locale: "und-u-cu-gbp".parse::<Locale>().unwrap().into(),
+ locale: locale!("und-u-cu-gbp").into(),
expected: "und-u-cu-gbp",
},
TestCase {
- locale: "en-ZA-u-cu-gbp".parse::<Locale>().unwrap().into(),
+ locale: locale!("en-ZA-u-cu-gbp").into(),
expected: "en-ZA-u-cu-gbp",
},
] {
- assert_eq!(cas.expected, cas.locale.to_string());
- writeable::assert_writeable_eq!(&cas.locale, cas.expected);
+ writeable::assert_writeable_eq!(cas.locale, cas.expected);
}
}
diff --git a/vendor/icu_provider/src/response.rs b/vendor/icu_provider/src/response.rs
index 653d20a68..1ea6c8a76 100644
--- a/vendor/icu_provider/src/response.rs
+++ b/vendor/icu_provider/src/response.rs
@@ -51,10 +51,10 @@ pub struct DataResponseMetadata {
/// To transform a [`DataPayload`] to a different type backed by the same data store (cart), use
/// [`DataPayload::map_project()`] or one of its sister methods.
///
-/// # `sync` feature
+/// # Cargo feature: `sync`
///
/// By default, the payload uses non-concurrent reference counting internally, and hence is neither
-/// [`Sync`] nor [`Send`]; if these traits are required, the `sync` feature can be enabled.
+/// [`Sync`] nor [`Send`]; if these traits are required, the `sync` Cargo feature can be enabled.
///
/// # Examples
///
@@ -183,7 +183,7 @@ where
/// use std::borrow::Cow;
///
/// let local_struct = HelloWorldV1 {
- /// message: Cow::Owned("example".to_string()),
+ /// message: Cow::Owned("example".to_owned()),
/// };
///
/// let payload =
@@ -236,8 +236,8 @@ where
/// let mut payload =
/// DataPayload::<HelloWorldV1Marker>::from_static_str("Hello");
///
- /// let suffix = " World".to_string();
- /// payload.with_mut(move |s| s.message.to_mut().push_str(&suffix));
+ /// let suffix = " World";
+ /// payload.with_mut(move |s| s.message.to_mut().push_str(suffix));
///
/// assert_eq!("Hello World", payload.get().message);
/// ```
diff --git a/vendor/icu_provider/src/serde/mod.rs b/vendor/icu_provider/src/serde/mod.rs
index d32148f02..2e96b3cb3 100644
--- a/vendor/icu_provider/src/serde/mod.rs
+++ b/vendor/icu_provider/src/serde/mod.rs
@@ -94,7 +94,7 @@ impl DataPayload<BufferMarker> {
///
/// # Examples
///
- /// Requires the `deserialize_json` feature:
+ /// Requires the `deserialize_json` Cargo feature:
///
/// ```
/// use icu_provider::buf::BufferFormat;
@@ -136,16 +136,16 @@ where
{
fn load_data(&self, key: DataKey, req: DataRequest) -> Result<DataResponse<M>, DataError> {
let buffer_response = BufferProvider::load_buffer(self.0, key, req)?;
- let buffer_format = buffer_response
- .metadata
- .buffer_format
- .ok_or_else(|| DataError::custom("BufferProvider didn't set BufferFormat"))?;
+ let buffer_format = buffer_response.metadata.buffer_format.ok_or_else(|| {
+ DataError::custom("BufferProvider didn't set BufferFormat").with_req(key, req)
+ })?;
Ok(DataResponse {
metadata: buffer_response.metadata,
payload: buffer_response
.payload
.map(|p| p.into_deserialized(buffer_format))
- .transpose()?,
+ .transpose()
+ .map_err(|e| e.with_req(key, req))?,
})
}
}
@@ -165,21 +165,21 @@ where
}
}
-#[cfg(feature = "serde_json")]
+#[cfg(feature = "deserialize_json")]
impl From<serde_json::error::Error> for crate::DataError {
fn from(e: serde_json::error::Error) -> Self {
crate::DataError::custom("JSON deserialize").with_display_context(&e)
}
}
-#[cfg(feature = "bincode")]
+#[cfg(feature = "deserialize_bincode_1")]
impl From<bincode::Error> for crate::DataError {
fn from(e: bincode::Error) -> Self {
crate::DataError::custom("Bincode deserialize").with_display_context(&e)
}
}
-#[cfg(feature = "postcard")]
+#[cfg(feature = "deserialize_postcard_1")]
impl From<postcard::Error> for crate::DataError {
fn from(e: postcard::Error) -> Self {
crate::DataError::custom("Postcard deserialize").with_display_context(&e)
diff --git a/vendor/icu_provider_adapters/.cargo-checksum.json b/vendor/icu_provider_adapters/.cargo-checksum.json
index 82805760b..292541e8f 100644
--- a/vendor/icu_provider_adapters/.cargo-checksum.json
+++ b/vendor/icu_provider_adapters/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"5ecb7cc7b9f229262dc3694db154ab479591430d0d10e03b5aed677067c16d09","LICENSE":"4ad7541d66a407234e2c84902124cef325c29f3e966353efdb800bedb8b8da21","README.md":"e6a08c2bc307b66c93de20c2c366da896f7fd3f5e5eb402edd2eeba79476b600","src/any_payload.rs":"55336b0a861be2da125a411924a3597de5593135c8ff589420237189b77311f8","src/either.rs":"aa309c26deafcb9470bb9eb15e629fc53f2fb5d7e412d1a2317bc170f0652588","src/empty.rs":"2ef71bb0eb3b81cf8cbb9f93c37bb0b7a106b4db941ffdefc8e88b944bee90d2","src/fallback/adapter.rs":"31d851e1d2adda59c06510cdfc43846a107ee706b731b3019b7c28571f0398ff","src/fallback/algorithms.rs":"bc8d17fb957f8f9ada8e13d6f0d35af248caa621441ffb3fcd273ff97e39e4a4","src/fallback/mod.rs":"ec165267f61c722300cc4a44be7561e31a5c65007f8a4c11fa074f31d768797a","src/fallback/provider.rs":"ef8a835e3ed2b7871b6f6e78ae2e73575b26adc9e8e0b5a7170c8513e7fe3269","src/filter/impls.rs":"58fcc1f03454769a3c11a92cb4b7b9f7833a0c042ea80b4e863609e2414eed0f","src/filter/mod.rs":"960e1c22d7d2323bf73c3ff6ea2d34158ff767f2a6b4fc8c40e982bf8c2dd500","src/fork/by_error.rs":"67742b78a80ff9765fd83fc28390687ed6e07f71afc0964b20221ff1f508e380","src/fork/macros.rs":"5aebb0134923fa9fa0fe7c16d2d85a1a29cf4ea49505187db56bf0bc8e984ad0","src/fork/mod.rs":"7378895128bf1ccc9de7f5675668ef922d3df7b84b04f68af4d5b49efe60341e","src/fork/predicates.rs":"314bf33144c6827cd3df05877d7c20fb64c9b18f6230e229340b8f04f4ccf4d3","src/helpers.rs":"008af3aa36ebf43ec249dd9162ff36c150fa00fe78b3065b023d59acbe218b7b","src/lib.rs":"7499b4bcb40453bc4678d6ae3febf05f5c1e351120513ddd694983e6da56f268","tests/data/langtest/de/core/helloworld@1/de.json":"5a45b1d80567de8c4ff754f7dbe20c22477c1e00a9400b38397eb034f295b8f8","tests/data/langtest/de/manifest.json":"fa2f848cff051fd12a909389fbbc44b93ae1feb92cce466cc4381f9548443ea9","tests/data/langtest/ro/core/helloworld@1/ro.json":"b6b68292746dd6bb2d92d9c08e2753db556ec9c954a3b593b0b8999df550f298","tests/data/langtest/ro/manifest.json":"fa2f848cff051fd12a909389fbbc44b93ae1feb92cce466cc4381f9548443ea9"},"package":"980c71d8a91b246ebbb97847178a4b816eea39d1d550c70ee566384555bb6545"} \ No newline at end of file
+{"files":{"Cargo.toml":"2546ca7ab46e2bd189ae3821948d10fdd46634138784d8b3c373c90ae9b1fe27","LICENSE":"4ad7541d66a407234e2c84902124cef325c29f3e966353efdb800bedb8b8da21","README.md":"e6a08c2bc307b66c93de20c2c366da896f7fd3f5e5eb402edd2eeba79476b600","src/any_payload.rs":"55336b0a861be2da125a411924a3597de5593135c8ff589420237189b77311f8","src/either.rs":"aa309c26deafcb9470bb9eb15e629fc53f2fb5d7e412d1a2317bc170f0652588","src/empty.rs":"3b55431437af04aaed5dcfc524d42c51a35bb7213274327cb1df70cb69d5a5c5","src/fallback/adapter.rs":"2e51f50215e9020f2e84a926227054e61fc001f44170bf27e1366c66097f2c83","src/fallback/algorithms.rs":"9409ad6f6f617d4433b9f6b303d131782877a0a10470533e3864b97355b9a3f1","src/fallback/mod.rs":"b2aa936b64ac0498c815683d5f3d151154fca9f962f56b172fd2582ff4b639ae","src/fallback/provider.rs":"ef8a835e3ed2b7871b6f6e78ae2e73575b26adc9e8e0b5a7170c8513e7fe3269","src/filter/impls.rs":"58fcc1f03454769a3c11a92cb4b7b9f7833a0c042ea80b4e863609e2414eed0f","src/filter/mod.rs":"960e1c22d7d2323bf73c3ff6ea2d34158ff767f2a6b4fc8c40e982bf8c2dd500","src/fork/by_error.rs":"4f89ba3b019f6ab36784577a664fece042ad2318026038cecb23c6f62fc63aa0","src/fork/macros.rs":"5aebb0134923fa9fa0fe7c16d2d85a1a29cf4ea49505187db56bf0bc8e984ad0","src/fork/mod.rs":"7378895128bf1ccc9de7f5675668ef922d3df7b84b04f68af4d5b49efe60341e","src/fork/predicates.rs":"314bf33144c6827cd3df05877d7c20fb64c9b18f6230e229340b8f04f4ccf4d3","src/helpers.rs":"008af3aa36ebf43ec249dd9162ff36c150fa00fe78b3065b023d59acbe218b7b","src/lib.rs":"7499b4bcb40453bc4678d6ae3febf05f5c1e351120513ddd694983e6da56f268","tests/data/langtest/de/core/helloworld@1/de.json":"5a45b1d80567de8c4ff754f7dbe20c22477c1e00a9400b38397eb034f295b8f8","tests/data/langtest/de/manifest.json":"fa2f848cff051fd12a909389fbbc44b93ae1feb92cce466cc4381f9548443ea9","tests/data/langtest/ro/core/helloworld@1/ro.json":"b6b68292746dd6bb2d92d9c08e2753db556ec9c954a3b593b0b8999df550f298","tests/data/langtest/ro/manifest.json":"fa2f848cff051fd12a909389fbbc44b93ae1feb92cce466cc4381f9548443ea9"},"package":"8e89bf33962b24bb48a4a21330c20c9ff17949338ea376360dd9eda2c209dca1"} \ No newline at end of file
diff --git a/vendor/icu_provider_adapters/Cargo.toml b/vendor/icu_provider_adapters/Cargo.toml
index 365a2a69b..6de64fe8b 100644
--- a/vendor/icu_provider_adapters/Cargo.toml
+++ b/vendor/icu_provider_adapters/Cargo.toml
@@ -12,7 +12,7 @@
[package]
edition = "2018"
name = "icu_provider_adapters"
-version = "1.0.0"
+version = "1.1.0"
authors = ["The ICU4X Project Developers"]
include = [
"src/**/*",
@@ -31,16 +31,16 @@ repository = "https://github.com/unicode-org/icu4x"
resolver = "2"
[dependencies.databake]
-version = "0.1.0"
+version = "0.1.3"
features = ["derive"]
optional = true
[dependencies.icu_locid]
-version = "1.0.0"
+version = "1.1.0"
features = ["zerovec"]
[dependencies.icu_provider]
-version = "1.0.0"
+version = "1.1.0"
features = ["macros"]
[dependencies.serde]
@@ -53,28 +53,23 @@ optional = true
default-features = false
[dependencies.tinystr]
-version = "0.7"
+version = "0.7.1"
features = ["zerovec"]
[dependencies.yoke]
-version = "0.6"
+version = "0.7.0"
[dependencies.zerovec]
-version = "0.9"
+version = "0.9.2"
features = ["yoke"]
-[dev-dependencies.icu_provider]
-version = "1.0.0"
-features = [
- "macros",
- "deserialize_json",
-]
+[dev-dependencies]
[features]
datagen = [
"std",
"serde",
- "databake",
+ "dep:databake",
"icu_provider/datagen",
"icu_locid/databake",
"zerovec/databake",
@@ -85,4 +80,7 @@ serde = [
"icu_locid/serde",
"icu_provider/serde",
]
-std = ["icu_locid/std"]
+std = [
+ "icu_locid/std",
+ "icu_provider/std",
+]
diff --git a/vendor/icu_provider_adapters/src/empty.rs b/vendor/icu_provider_adapters/src/empty.rs
index 31a6c42aa..85c6b9bc1 100644
--- a/vendor/icu_provider_adapters/src/empty.rs
+++ b/vendor/icu_provider_adapters/src/empty.rs
@@ -86,3 +86,26 @@ where
Err(self.error_kind.with_req(M::KEY, base_req))
}
}
+
+#[cfg(feature = "datagen")]
+impl<M> icu_provider::datagen::IterableDataProvider<M> for EmptyDataProvider
+where
+ M: KeyedDataMarker,
+{
+ fn supported_locales(&self) -> Result<alloc::vec::Vec<DataLocale>, DataError> {
+ Ok(vec![])
+ }
+}
+
+#[cfg(feature = "datagen")]
+impl<M> icu_provider::datagen::IterableDynamicDataProvider<M> for EmptyDataProvider
+where
+ M: DataMarker,
+{
+ fn supported_locales_for_key(
+ &self,
+ _: DataKey,
+ ) -> Result<alloc::vec::Vec<DataLocale>, DataError> {
+ Ok(vec![])
+ }
+}
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
diff --git a/vendor/icu_provider_adapters/src/fork/by_error.rs b/vendor/icu_provider_adapters/src/fork/by_error.rs
index 5069229fa..b3badb147 100644
--- a/vendor/icu_provider_adapters/src/fork/by_error.rs
+++ b/vendor/icu_provider_adapters/src/fork/by_error.rs
@@ -32,6 +32,11 @@ impl<P0, P1, F> ForkByErrorProvider<P0, P1, F> {
(&self.0, &self.1)
}
+ /// Returns mutable references to the inner providers.
+ pub fn inner_mut(&mut self) -> (&mut P0, &mut P1) {
+ (&mut self.0, &mut self.1)
+ }
+
/// Returns ownership of the inner providers to the caller.
pub fn into_inner(self) -> (P0, P1) {
(self.0, self.1)
@@ -142,10 +147,20 @@ impl<P, F> MultiForkByErrorProvider<P, F> {
&self.providers
}
+ /// Exposes a mutable vector of providers to a closure so it can be mutated.
+ pub fn with_inner_mut(&mut self, f: impl FnOnce(&mut Vec<P>)) {
+ f(&mut self.providers)
+ }
+
/// Returns ownership of the inner providers to the caller.
pub fn into_inner(self) -> Vec<P> {
self.providers
}
+
+ /// Adds an additional child provider.
+ pub fn push(&mut self, provider: P) {
+ self.providers.push(provider);
+ }
}
impl<P, F> BufferProvider for MultiForkByErrorProvider<P, F>
@@ -158,15 +173,16 @@ where
key: DataKey,
req: DataRequest,
) -> Result<DataResponse<BufferMarker>, DataError> {
+ let mut last_error = DataErrorKind::MissingDataKey.with_key(key);
for provider in self.providers.iter() {
let result = provider.load_buffer(key, req);
match result {
Ok(ok) => return Ok(ok),
Err(err) if !self.predicate.test(key, Some(req), err) => return Err(err),
- _ => (),
+ Err(err) => last_error = err,
};
}
- Err(DataErrorKind::MissingDataKey.with_key(key))
+ Err(last_error)
}
}
@@ -176,15 +192,16 @@ where
F: ForkByErrorPredicate,
{
fn load_any(&self, key: DataKey, req: DataRequest) -> Result<AnyResponse, DataError> {
+ let mut last_error = DataErrorKind::MissingDataKey.with_key(key);
for provider in self.providers.iter() {
let result = provider.load_any(key, req);
match result {
Ok(ok) => return Ok(ok),
Err(err) if !self.predicate.test(key, Some(req), err) => return Err(err),
- _ => (),
+ Err(err) => last_error = err,
};
}
- Err(DataErrorKind::MissingDataKey.with_key(key))
+ Err(last_error)
}
}
@@ -195,15 +212,16 @@ where
F: ForkByErrorPredicate,
{
fn load_data(&self, key: DataKey, req: DataRequest) -> Result<DataResponse<M>, DataError> {
+ let mut last_error = DataErrorKind::MissingDataKey.with_key(key);
for provider in self.providers.iter() {
let result = provider.load_data(key, req);
match result {
Ok(ok) => return Ok(ok),
Err(err) if !self.predicate.test(key, Some(req), err) => return Err(err),
- _ => (),
+ Err(err) => last_error = err,
};
}
- Err(DataErrorKind::MissingDataKey.with_key(key))
+ Err(last_error)
}
}
@@ -215,15 +233,16 @@ where
F: ForkByErrorPredicate,
{
fn supported_locales_for_key(&self, key: DataKey) -> Result<Vec<DataLocale>, DataError> {
+ let mut last_error = DataErrorKind::MissingDataKey.with_key(key);
for provider in self.providers.iter() {
let result = provider.supported_locales_for_key(key);
match result {
Ok(ok) => return Ok(ok),
Err(err) if !self.predicate.test(key, None, err) => return Err(err),
- _ => (),
+ Err(err) => last_error = err,
};
}
- Err(DataErrorKind::MissingDataKey.with_key(key))
+ Err(last_error)
}
}
@@ -240,6 +259,7 @@ where
key: DataKey,
mut from: DataPayload<MFrom>,
) -> Result<DataPayload<MTo>, (DataPayload<MFrom>, DataError)> {
+ let mut last_error = DataErrorKind::MissingDataKey.with_key(key);
for provider in self.providers.iter() {
let result = provider.convert(key, from);
match result {
@@ -250,10 +270,11 @@ where
return Err((returned, err));
}
from = returned;
+ last_error = err;
}
};
}
- Err((from, DataErrorKind::MissingDataKey.with_key(key)))
+ Err((from, last_error))
}
}
diff --git a/vendor/icu_provider_macros/.cargo-checksum.json b/vendor/icu_provider_macros/.cargo-checksum.json
index 21caa79bb..67fb422f7 100644
--- a/vendor/icu_provider_macros/.cargo-checksum.json
+++ b/vendor/icu_provider_macros/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"5c2656c9d6a8256494d0d58648ba09110cb602fa81b59580e758695704299664","LICENSE":"4ad7541d66a407234e2c84902124cef325c29f3e966353efdb800bedb8b8da21","README.md":"f9f95075851c9c3b7d0559c25794ebcad5dee957c7fb27c343418a3324f15b8a","src/lib.rs":"e3f9092950ee1db12dbbd5b3fea39aead909896ee317f5b38a6442c209e37d03","src/tests.rs":"729a551b69f368100b142a3260573307b653931228cdc803eeffbb81910134f7"},"package":"38cf6f5b65cf81f0b4298da647101acbfe6ae0e25263f92bd7a22597e9d6d606"} \ No newline at end of file
+{"files":{"Cargo.toml":"8f35af4529f0a10bf10dc6ba2ad5fffcfb78d29c78d1e3d4e1d737839480f7a1","LICENSE":"4ad7541d66a407234e2c84902124cef325c29f3e966353efdb800bedb8b8da21","README.md":"f9f95075851c9c3b7d0559c25794ebcad5dee957c7fb27c343418a3324f15b8a","src/lib.rs":"c6675b847fb5a2fd0a686460598c4e76b55eff51df792da0386be9b02156db5f","src/tests.rs":"c0f93af328a3e15e93ca5914a14adacf73274eff821f2f849c5b96ce884547b1"},"package":"9ddb07844c2ffc4c28840e799e9e54ff054393cf090740decf25624e9d94b93a"} \ No newline at end of file
diff --git a/vendor/icu_provider_macros/Cargo.toml b/vendor/icu_provider_macros/Cargo.toml
index 1f2350f36..289aad854 100644
--- a/vendor/icu_provider_macros/Cargo.toml
+++ b/vendor/icu_provider_macros/Cargo.toml
@@ -12,7 +12,7 @@
[package]
edition = "2018"
name = "icu_provider_macros"
-version = "1.0.0"
+version = "1.1.0"
authors = ["The ICU4X Project Developers"]
include = [
"src/**/*",
diff --git a/vendor/icu_provider_macros/src/lib.rs b/vendor/icu_provider_macros/src/lib.rs
index e43cebfce..8d39f0f87 100644
--- a/vendor/icu_provider_macros/src/lib.rs
+++ b/vendor/icu_provider_macros/src/lib.rs
@@ -129,7 +129,7 @@ fn data_struct_impl(attr: AttributeArgs, input: DeriveInput) -> TokenStream2 {
.find(|a| a.path.is_ident("databake"))
.map(|a| {
quote! {
- #[derive(Default, databake::Bake)]
+ #[derive(databake::Bake)]
#a
}
})
diff --git a/vendor/icu_provider_macros/src/tests.rs b/vendor/icu_provider_macros/src/tests.rs
index 51411852b..c7ca63530 100644
--- a/vendor/icu_provider_macros/src/tests.rs
+++ b/vendor/icu_provider_macros/src/tests.rs
@@ -144,7 +144,7 @@ fn test_databake() {
),
quote!(
#[doc = "Marker type for [`FooV1`]: \"demo/bar@1\"\n\n- Fallback priority: language (default)\n- Extension keyword: none (default)"]
- #[derive(Default, databake::Bake)]
+ #[derive(databake::Bake)]
#[databake(path = test::path)]
pub struct BarV1Marker;
impl icu_provider::DataMarker for BarV1Marker {