blob: 85c6b9bc19ae0673a56010a641663416a3feaca0 [file] [log] [blame]
// 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))
}
}
#[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![])
}
}