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
sourceimpl AnyPayload
impl AnyPayload
sourcepub fn downcast<M>(self) -> Result<DataPayload<M>, DataError> where
M: DataMarker + 'static,
M::Yokeable: ZeroFrom<'static, M::Yokeable>,
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 + 'static,
M::Yokeable: ZeroFrom<'static, M::Yokeable>,
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 from_static_ref<Y>(static_ref: &'static Y) -> Self where
Y: for<'a> Yokeable<'a>,
pub fn from_static_ref<Y>(static_ref: &'static Y) -> Self where
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
sourceimpl Clone for AnyPayload
impl Clone for AnyPayload
sourcefn clone(&self) -> AnyPayload
fn clone(&self) -> AnyPayload
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for AnyPayload
impl Debug for AnyPayload
sourceimpl<'a> Yokeable<'a> for AnyPayload
impl<'a> Yokeable<'a> for AnyPayload
type Output = Self
type Output = Self
This type MUST be Self
with the 'static
replaced with 'a
, i.e. Self<'a>
sourcefn transform(&self) -> &Self::Output
fn transform(&self) -> &Self::Output
This method must cast self
between &'a Self<'static>
and &'a Self<'a>
. Read more
sourcefn transform_owned(self) -> Self::Output
fn transform_owned(self) -> Self::Output
This method must cast self
between Self<'static>
and Self<'a>
. Read more
sourceunsafe 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 more
sourcefn 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 more
impl<'a> IsCovariant<'a> for AnyPayload
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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more