[][src]Macro intertrait::castable_to

castable_to!() { /* proc-macro */ }

Declares target traits for casting implemented by a type.

This macro is for registering both a concrete type and its traits to be targets for casting. Useful when the type definition and the trait implementations are in an external crate.

Note: this macro cannot be used in an expression or statement prior to Rust 1.45.0, due to a previous limitation. If you want to use it in an expression or statement, use Rust 1.45.0 or later.

Examples

use intertrait::*;

#[derive(std::fmt::Debug)]
enum Data {
    A, B, C
}
trait Greet {
    fn greet(&self);
}
impl Greet for Data {
    fn greet(&self) {
        println!("Hello");
    }
}

castable_to! { Data => std::fmt::Debug, Greet }

When the type is Sync + Send and is used with Arc:

use intertrait::*;

#[derive(std::fmt::Debug)]
enum Data {
    A, B, C
}
trait Greet {
    fn greet(&self);
}
impl Greet for Data {
    fn greet(&self) {
        println!("Hello");
    }
}
castable_to! { Data => [sync] std::fmt::Debug, Greet }