Macro enso_prelude::impls[][src]

macro_rules! impls {
    ($([$($impl_params:tt)*])? From<$ty:ty> for $target:ty $(where [$($bounds:tt)*])? {
        |$arg:tt| $($result:tt)*
    } ) => { ... };
    ($([$($impl_params:tt)*])? From + &From <$ty:ty> for $target:ty $(where [$($bounds:tt)*])? {
        |$arg:tt| $($result:tt)*
    } ) => { ... };
    ($([$($impl_params:tt)*])? Into + &Into <$ty:ty> for $target:ty $(where [$($bounds:tt)*])? {
        |$arg:tt| $($result:tt)*
    } ) => { ... };
    ($([$($impl_params:tt)*])? PhantomFrom<$ty:ty> for $target:ty {
        $($result:tt)*
    } ) => { ... };
}
Expand description

Allows for nicer definition of impls, similar to what Haskell or Scala does. Reduces the needed boilerplate. For example, the following usage:

struct A { name:String };
impls! { From<A> for String { |t| t.name.clone() } }

compiles to:

struct A { name:String };
impl From<A> for String {
    fn from(t:A) -> Self {
        t.name.clone()
    }
}

This macro is meant to support many standard traits (like From) and should grow in the future. Currently supported ones are:

  • From<…>
  • From + &From<…>
  • Into + &Into<…>
  • PhantomFrom<…>