pub trait AnyProvider {
// Required method
fn load_any(
&self,
key: DataKey,
req: DataRequest<'_>,
) -> Result<AnyResponse, DataError>;
}Expand description
An object-safe data provider that returns data structs cast to dyn Any trait objects.
§Examples
use icu_provider::hello_world::*;
use icu_provider::prelude::*;
use std::borrow::Cow;
let any_provider = HelloWorldProvider.as_any_provider();
let req = DataRequest {
locale: &icu_locid::langid!("de").into(),
metadata: Default::default(),
};
// Downcasting manually
assert_eq!(
any_provider
.load_any(HelloWorldV1Marker::KEY, req)
.expect("load should succeed")
.downcast::<HelloWorldV1Marker>()
.expect("types should match")
.take_payload()
.unwrap()
.get(),
&HelloWorldV1 {
message: Cow::Borrowed("Hallo Welt"),
},
);
// Downcasting automatically
let downcasting_provider: &dyn DataProvider<HelloWorldV1Marker> =
&any_provider.as_downcasting();
assert_eq!(
downcasting_provider
.load(req)
.expect("load should succeed")
.take_payload()
.unwrap()
.get(),
&HelloWorldV1 {
message: Cow::Borrowed("Hallo Welt"),
},
);Required Methods§
Sourcefn load_any(
&self,
key: DataKey,
req: DataRequest<'_>,
) -> Result<AnyResponse, DataError>
fn load_any( &self, key: DataKey, req: DataRequest<'_>, ) -> Result<AnyResponse, DataError>
Loads an AnyPayload according to the key and request.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl<'a, T: AnyProvider + ?Sized> AnyProvider for &'a T
impl<'a, T: AnyProvider + ?Sized> AnyProvider for &'a T
fn load_any( &self, key: DataKey, req: DataRequest<'_>, ) -> Result<AnyResponse, DataError>
Source§impl<T: AnyProvider + ?Sized> AnyProvider for Arc<T>
Available on target_has_atomic=ptr only.
impl<T: AnyProvider + ?Sized> AnyProvider for Arc<T>
Available on
target_has_atomic=ptr only.