Trait icu_provider::marker::DataMarker[][src]

pub trait DataMarker<'data> {
    type Yokeable: for<'a> Yokeable<'a>;
    type Cart: 'data + ?Sized;
}
Expand description

Trait marker for data structs. All types delivered by the data provider must be associated with something implementing this trait.

By convention, the non-standard Marker suffix is used by types implementing DataMarker.

In addition to a marker type implementing DataMarker, the following impls must also be present for the data struct:

  • impl<'a> Yokeable<'a> (required)
  • impl ZeroCopyFrom<Cart> (required for use with some DataPayload constructors)

See also some common pre-made DataMarker impls in this module.

Examples

Implementing DataMarker for a custom type:

use icu_provider::prelude::*;
use icu_provider::yoke::*;
use std::borrow::Cow;
use std::rc::Rc;

#[derive(Yokeable, ZeroCopyFrom)]
struct MyDataStruct<'data> {
    message: Cow<'data, str>,
}

struct MyDataStructMarker;

impl<'data> DataMarker<'data> for MyDataStructMarker {
    type Yokeable = MyDataStruct<'static>;

    // Note: the cart could also be just `str` since
    // MyDataStruct has only one field.
    type Cart = MyDataStruct<'data>;
}

// We can now use MyDataStruct with DataProvider:
let s = Rc::from(MyDataStruct {
    message: Cow::Borrowed("Hello World")
});
let payload = DataPayload::<MyDataStructMarker>::from_partial_owned(s);
assert_eq!(payload.get().message, "Hello World");

Associated Types

A type that implements Yokeable. This should typically be the 'static version of a data struct.

A type that is capable of owning all data necessary for the Yokeable type. This can often be the 'data version of the data struct.

Implementors