Trait icu_provider::dynutil::UpcastDataPayload
source · [−]pub trait UpcastDataPayload<M> where
M: DataMarker,
Self: Sized + DataMarker, {
fn upcast(other: DataPayload<M>) -> DataPayload<Self>;
}
Expand description
Trait to allow conversion from DataPayload<T>
to DataPayload<S>
.
This trait can be manually implemented in order to enable impl_dyn_provider
.
Required Methods
fn upcast(other: DataPayload<M>) -> DataPayload<Self>
fn upcast(other: DataPayload<M>) -> DataPayload<Self>
Upcast a DataPayload<T>
to a DataPayload<S>
where T
implements trait S
.
Examples
Upcast and then downcast a data struct of type Cow<str>
(cart type String
) via
AnyPayload
:
use icu_provider::prelude::*;
use icu_provider::dynutil::UpcastDataPayload;
use icu_provider::marker::CowStrMarker;
use std::borrow::Cow;
let data = "foo".to_string();
let original = DataPayload::<CowStrMarker>::from_owned(Cow::Owned(data));
let upcasted = AnyMarker::upcast(original);
let downcasted = upcasted
.downcast::<CowStrMarker>()
.expect("Type conversion");
assert_eq!(downcasted.get(), "foo");