Skip to main content

AnyProvider

Trait AnyProvider 

Source
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§

Source

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

Source§

impl<T: AnyProvider + ?Sized> AnyProvider for Arc<T>

Available on target_has_atomic=ptr only.
Source§

impl<T: AnyProvider + ?Sized> AnyProvider for Box<T>

Source§

impl<T: AnyProvider + ?Sized> AnyProvider for Rc<T>

Implementors§