summaryrefslogtreecommitdiffstats
path: root/vendor/icu_provider_adapters/src/empty.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:32 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:32 +0000
commit4547b622d8d29df964fa2914213088b148c498fc (patch)
tree9fc6b25f3c3add6b745be9a2400a6e96140046e9 /vendor/icu_provider_adapters/src/empty.rs
parentReleasing progress-linux version 1.66.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-4547b622d8d29df964fa2914213088b148c498fc.tar.xz
rustc-4547b622d8d29df964fa2914213088b148c498fc.zip
Merging upstream version 1.67.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--vendor/icu_provider_adapters/src/empty.rs88
1 files changed, 88 insertions, 0 deletions
diff --git a/vendor/icu_provider_adapters/src/empty.rs b/vendor/icu_provider_adapters/src/empty.rs
new file mode 100644
index 000000000..31a6c42aa
--- /dev/null
+++ b/vendor/icu_provider_adapters/src/empty.rs
@@ -0,0 +1,88 @@
+// This file is part of ICU4X. For terms of use, please see the file
+// called LICENSE at the top level of the ICU4X source tree
+// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+//! Empty data provider implementations.
+//!
+//! Use [`EmptyDataProvider`] as a stand-in for a provider that always fails.
+
+use icu_provider::prelude::*;
+
+/// A data provider that always returns an error.
+///
+/// The returned error kind is configurable.
+///
+/// # Examples
+///
+/// ```
+/// use icu_provider::hello_world::HelloWorldV1Marker;
+/// use icu_provider::prelude::*;
+/// use icu_provider_adapters::empty::EmptyDataProvider;
+///
+/// let provider = EmptyDataProvider::new();
+///
+/// assert!(matches!(
+/// provider.load_any(HelloWorldV1Marker::KEY, Default::default()),
+/// Err(DataError {
+/// kind: DataErrorKind::MissingDataKey,
+/// ..
+/// })
+/// ));
+/// ```
+pub struct EmptyDataProvider {
+ error_kind: DataErrorKind,
+}
+
+impl Default for EmptyDataProvider {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+impl EmptyDataProvider {
+ /// Creates a data provider that always returns [`DataErrorKind::MissingDataKey`].
+ pub fn new() -> Self {
+ Self {
+ error_kind: DataErrorKind::MissingDataKey,
+ }
+ }
+
+ /// Creates a data provider that always returns the specified error kind.
+ pub fn new_with_error_kind(error_kind: DataErrorKind) -> Self {
+ Self { error_kind }
+ }
+}
+
+impl AnyProvider for EmptyDataProvider {
+ fn load_any(&self, key: DataKey, base_req: DataRequest) -> Result<AnyResponse, DataError> {
+ Err(self.error_kind.with_req(key, base_req))
+ }
+}
+
+impl BufferProvider for EmptyDataProvider {
+ fn load_buffer(
+ &self,
+ key: DataKey,
+ base_req: DataRequest,
+ ) -> Result<DataResponse<BufferMarker>, DataError> {
+ Err(self.error_kind.with_req(key, base_req))
+ }
+}
+
+impl<M> DynamicDataProvider<M> for EmptyDataProvider
+where
+ M: DataMarker,
+{
+ fn load_data(&self, key: DataKey, base_req: DataRequest) -> Result<DataResponse<M>, DataError> {
+ Err(self.error_kind.with_req(key, base_req))
+ }
+}
+
+impl<M> DataProvider<M> for EmptyDataProvider
+where
+ M: KeyedDataMarker,
+{
+ fn load(&self, base_req: DataRequest) -> Result<DataResponse<M>, DataError> {
+ Err(self.error_kind.with_req(M::KEY, base_req))
+ }
+}