Trait frunk_core::labelled::LabelledGeneric
[−]
[src]
pub trait LabelledGeneric { type Repr; fn into(self) -> Self::Repr; fn from(r: Self::Repr) -> Self; fn convert_from<A>(a: A) -> Self
where
A: LabelledGeneric<Repr = Self::Repr>,
Self: Sized, { ... } fn sculpted_convert_from<A, Indices>(a: A) -> Self
where
A: LabelledGeneric,
Self: Sized,
<A as LabelledGeneric>::Repr: Sculptor<Self::Repr, Indices>, { ... } fn transform_from<A, Indices>(a: A) -> Self
where
A: LabelledGeneric,
Self: Sized,
<A as LabelledGeneric>::Repr: Sculptor<Self::Repr, Indices>, { ... } }
A trait that converts from a type to a labelled generic representation
LabelledGenerics allow us to have completely type-safe, boilerplate free conversions between different structs.
For the most part, you should be using the derivation that is available through frunk_derive to generate instances of this typeclass for your types.
Examples
use frunk_core::hlist::*; use frunk_core::labelled::*; #[derive(LabelledGeneric)] struct NewUser<'a> { first_name: &'a str, last_name: &'a str, age: usize, } // Notice that the fields are mismatched in terms of ordering #[derive(LabelledGeneric)] struct SavedUser<'a> { last_name: &'a str, age: usize, first_name: &'a str, } let n_user = NewUser { first_name: "Joe", last_name: "Blow", age: 30, }; // transform_from automagically sculpts the labelled generic // representation of the source object to that of the target type let s_user: SavedUser = transform_from(n_user); // doneRun
Associated Types
type Repr
The labelled generic representation type
Required Methods
fn into(self) -> Self::Repr
Go from something to Repr
fn from(r: Self::Repr) -> Self
Go from labelled Repr to something
Provided Methods
fn convert_from<A>(a: A) -> Self where
A: LabelledGeneric<Repr = Self::Repr>,
Self: Sized,
A: LabelledGeneric<Repr = Self::Repr>,
Self: Sized,
From one type to another using a type with a compatible labelled generic representation
fn sculpted_convert_from<A, Indices>(a: A) -> Self where
A: LabelledGeneric,
Self: Sized,
<A as LabelledGeneric>::Repr: Sculptor<Self::Repr, Indices>,
A: LabelledGeneric,
Self: Sized,
<A as LabelledGeneric>::Repr: Sculptor<Self::Repr, Indices>,
Converts from another type A into Self assuming that A and Self have labelled generic representations that can be sculpted into each other.
Note that this method tosses away the "remainder" of the sculpted representation. In other words, anything that is not needed from A gets tossed out.
fn transform_from<A, Indices>(a: A) -> Self where
A: LabelledGeneric,
Self: Sized,
<A as LabelledGeneric>::Repr: Sculptor<Self::Repr, Indices>,
A: LabelledGeneric,
Self: Sized,
<A as LabelledGeneric>::Repr: Sculptor<Self::Repr, Indices>,
Converts from another type A into Self assuming that A and Self have labelled generic representations that can be sculpted into each other.
Note that this method tosses away the "remainder" of the sculpted representation. In other words, anything that is not needed from A gets tossed out.