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

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");

Implementors