pub struct AnyPayload { /* private fields */ }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.
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
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
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
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 40 bytes