pub struct IdentifierNotFoundPredicate;Expand description
A predicate that allows forking providers to search for a provider that supports a
particular locale, based on whether it returns DataErrorKind::IdentifierNotFound.
§Examples
use icu_provider_adapters::fork::ForkByErrorProvider;
use icu_provider_adapters::fork::predicates::IdentifierNotFoundPredicate;
use icu_provider::prelude::*;
use icu_provider::hello_world::*;
use icu_locale::langid;
struct SingleLocaleProvider(DataLocale);
impl DataProvider<HelloWorldV1> for SingleLocaleProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<HelloWorldV1>, DataError> {
if *req.id.locale != self.0 {
return Err(DataErrorKind::IdentifierNotFound.with_req(HelloWorldV1::INFO, req));
}
HelloWorldProvider.load(req)
}
}
let provider_de = SingleLocaleProvider(langid!("de").into());
let provider_ro = SingleLocaleProvider(langid!("ro").into());
// Create the forking provider:
let provider = ForkByErrorProvider::new_with_predicate(
provider_de,
provider_ro,
IdentifierNotFoundPredicate
);
// Test that we can load both "de" and "ro" data:
let german_hello_world: DataResponse<HelloWorldV1> = provider
.load(DataRequest {
id: DataIdentifierBorrowed::for_locale(&langid!("de").into()),
..Default::default()
})
.expect("Loading should succeed");
assert_eq!("Hallo Welt", german_hello_world.payload.get().message);
let romanian_hello_world: DataResponse<HelloWorldV1> = provider
.load(DataRequest {
id: DataIdentifierBorrowed::for_locale(&langid!("ro").into()),
..Default::default()
})
.expect("Loading should succeed");
assert_eq!("Salut, lume", romanian_hello_world.payload.get().message);
// We should not be able to load "en" data because it is not in either provider:
DataProvider::<HelloWorldV1>::load(
&provider,
DataRequest {
id: DataIdentifierBorrowed::for_locale(&langid!("en").into()),
..Default::default()
}
)
.expect_err("No English data");Trait Implementations§
Source§impl Debug for IdentifierNotFoundPredicate
impl Debug for IdentifierNotFoundPredicate
Source§impl ForkByErrorPredicate for IdentifierNotFoundPredicate
impl ForkByErrorPredicate for IdentifierNotFoundPredicate
Source§const UNIT_ERROR: DataErrorKind = DataErrorKind::IdentifierNotFound
const UNIT_ERROR: DataErrorKind = DataErrorKind::IdentifierNotFound
The error to return if there are zero providers.
Source§fn test(
&self,
_: DataMarkerInfo,
_: Option<DataRequest<'_>>,
err: DataError,
) -> bool
fn test( &self, _: DataMarkerInfo, _: Option<DataRequest<'_>>, err: DataError, ) -> bool
This function is called when a data request fails and there are additional providers
that could possibly fulfill the request. Read more
Source§impl PartialEq for IdentifierNotFoundPredicate
impl PartialEq for IdentifierNotFoundPredicate
Source§fn eq(&self, other: &IdentifierNotFoundPredicate) -> bool
fn eq(&self, other: &IdentifierNotFoundPredicate) -> bool
Tests for
self and other values to be equal, and is used by ==.impl Eq for IdentifierNotFoundPredicate
impl StructuralPartialEq for IdentifierNotFoundPredicate
Auto Trait Implementations§
impl Freeze for IdentifierNotFoundPredicate
impl RefUnwindSafe for IdentifierNotFoundPredicate
impl Send for IdentifierNotFoundPredicate
impl Sync for IdentifierNotFoundPredicate
impl Unpin for IdentifierNotFoundPredicate
impl UnsafeUnpin for IdentifierNotFoundPredicate
impl UnwindSafe for IdentifierNotFoundPredicate
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more