Struct icu_provider::any::AnyPayload
source · pub struct AnyPayload {
inner: AnyPayloadInner,
type_name: &'static str,
}
Expand description
A type-erased data payload.
The only useful method on this type is AnyPayload::downcast()
, which transforms this into
a normal DataPayload
which you can subsequently access or mutate.
As with DataPayload
, cloning is designed to be cheap.
Fields§
§inner: AnyPayloadInner
§type_name: &'static str
Implementations§
source§impl AnyPayload
impl AnyPayload
sourcepub fn downcast<M>(self) -> Result<DataPayload<M>, DataError>where
M: DataMarker,
M::Yokeable: ZeroFrom<'static, M::Yokeable> + MaybeSendSync,
for<'a> YokeTraitHack<<M::Yokeable as Yokeable<'a>>::Output>: Clone,
pub fn downcast<M>(self) -> Result<DataPayload<M>, DataError>where
M: DataMarker,
M::Yokeable: ZeroFrom<'static, M::Yokeable> + MaybeSendSync,
for<'a> YokeTraitHack<<M::Yokeable as Yokeable<'a>>::Output>: Clone,
Transforms a type-erased AnyPayload
into a concrete DataPayload<M>
.
Because it is expected that the call site knows the identity of the AnyPayload (e.g., from
the data request), this function returns a DataError
if the generic type does not match
the type stored in the AnyPayload
.
sourcepub fn downcast_cloned<M>(&self) -> Result<DataPayload<M>, DataError>where
M: DataMarker,
M::Yokeable: ZeroFrom<'static, M::Yokeable> + MaybeSendSync,
for<'a> YokeTraitHack<<M::Yokeable as Yokeable<'a>>::Output>: Clone,
pub fn downcast_cloned<M>(&self) -> Result<DataPayload<M>, DataError>where
M: DataMarker,
M::Yokeable: ZeroFrom<'static, M::Yokeable> + MaybeSendSync,
for<'a> YokeTraitHack<<M::Yokeable as Yokeable<'a>>::Output>: Clone,
Clones and then transforms a type-erased AnyPayload
into a concrete DataPayload<M>
.
sourcepub fn from_static_ref<Y>(static_ref: &'static Y) -> Selfwhere
Y: for<'a> Yokeable<'a>,
pub fn from_static_ref<Y>(static_ref: &'static Y) -> Selfwhere
Y: for<'a> Yokeable<'a>,
Creates an AnyPayload
from a static reference to a data struct.
§Examples
use icu_provider::hello_world::*;
use icu_provider::prelude::*;
use std::borrow::Cow;
const HELLO_DATA: HelloWorldV1<'static> = HelloWorldV1 {
message: Cow::Borrowed("Custom Hello World"),
};
let any_payload = AnyPayload::from_static_ref(&HELLO_DATA);
let payload: DataPayload<HelloWorldV1Marker> =
any_payload.downcast().expect("TypeId matches");
assert_eq!("Custom Hello World", payload.get().message);
Trait Implementations§
source§impl Clone for AnyPayload
impl Clone for AnyPayload
source§fn clone(&self) -> AnyPayload
fn clone(&self) -> AnyPayload
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for AnyPayload
impl Debug for AnyPayload
source§impl<'a> Yokeable<'a> for AnyPayloadwhere
Self: Sized,
impl<'a> Yokeable<'a> for AnyPayloadwhere
Self: Sized,
source§type Output = AnyPayload
type Output = AnyPayload
This type MUST be
Self
with the 'static
replaced with 'a
, i.e. Self<'a>
source§fn transform_owned(self) -> Self::Output
fn transform_owned(self) -> Self::Output
Auto Trait Implementations§
impl Freeze for AnyPayload
impl !RefUnwindSafe for AnyPayload
impl !Send for AnyPayload
impl !Sync for AnyPayload
impl Unpin for AnyPayload
impl !UnwindSafe for AnyPayload
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)