Struct icu_provider::any::AnyPayload
source · 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
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 AnyPayload
impl<'a> Yokeable<'a> for AnyPayload
§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 !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