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: DynamicDataMarker,
M::DataStruct: ZeroFrom<'static, M::DataStruct> + MaybeSendSync,
for<'a> YokeTraitHack<<M::DataStruct as Yokeable<'a>>::Output>: Clone,
pub fn downcast<M>(self) -> Result<DataPayload<M>, DataError>where
M: DynamicDataMarker,
M::DataStruct: ZeroFrom<'static, M::DataStruct> + MaybeSendSync,
for<'a> YokeTraitHack<<M::DataStruct 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: DynamicDataMarker,
M::DataStruct: ZeroFrom<'static, M::DataStruct> + MaybeSendSync,
for<'a> YokeTraitHack<<M::DataStruct as Yokeable<'a>>::Output>: Clone,
pub fn downcast_cloned<M>(&self) -> Result<DataPayload<M>, DataError>where
M: DynamicDataMarker,
M::DataStruct: ZeroFrom<'static, M::DataStruct> + MaybeSendSync,
for<'a> YokeTraitHack<<M::DataStruct 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
source§unsafe fn make(this: Self::Output) -> Self
unsafe fn make(this: Self::Output) -> Self
This method can be used to cast away
Self<'a>
’s lifetime. Read moresource§fn transform_mut<F>(&'a mut self, f: F)where
F: 'static + for<'b> FnOnce(&'b mut Self::Output),
fn transform_mut<F>(&'a mut self, f: F)where
F: 'static + for<'b> FnOnce(&'b mut Self::Output),
This method must cast
self
between &'a mut Self<'static>
and &'a mut Self<'a>
,
and pass it to f
. Read moreAuto 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
)source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more