// 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 alloc::collections::BTreeSet; #[cfg(feature = "export")] use icu_provider::export::ExportableProvider; use icu_provider::prelude::*; /// A data provider that always returns an error. /// /// The returned error kind is configurable. /// /// # Examples /// /// ``` /// use icu_provider::hello_world::HelloWorldV1; /// use icu_provider::prelude::*; /// use icu_provider_adapters::empty::EmptyDataProvider; /// /// let provider = EmptyDataProvider::new(); /// /// assert!(matches!( /// DataProvider::::load(&provider, Default::default()), /// Err(DataError { /// kind: DataErrorKind::MarkerNotFound, /// .. /// }) /// )); /// ``` #[derive(Debug)] 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::MarkerNotFound`]. pub fn new() -> Self { Self { error_kind: DataErrorKind::MarkerNotFound, } } /// 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 DynamicDataProvider for EmptyDataProvider where M: DynamicDataMarker, { fn load_data( &self, marker: DataMarkerInfo, base_req: DataRequest, ) -> Result, DataError> { Err(self.error_kind.with_req(marker, base_req)) } } impl DataProvider for EmptyDataProvider where M: DataMarker, { fn load(&self, base_req: DataRequest) -> Result, DataError> { Err(self.error_kind.with_req(M::INFO, base_req)) } } impl IterableDataProvider for EmptyDataProvider where M: DataMarker, { fn iter_ids(&self) -> Result>, DataError> { Ok(Default::default()) } } impl IterableDynamicDataProvider for EmptyDataProvider where M: DynamicDataMarker, { fn iter_ids_for_marker( &self, _: DataMarkerInfo, ) -> Result>, DataError> { Ok(Default::default()) } } #[cfg(feature = "export")] impl ExportableProvider for EmptyDataProvider { fn supported_markers(&self) -> alloc::collections::BTreeSet { Default::default() } }