[][src]Crate as_any_min

This is a very minimal crate that makes it easier to work with traits that implement Any by allowing you to easily upcast to it.

Example

use core::any::Any;
use as_any_min::AsAny;
 
struct MyStruct;
trait MyTrait {}
impl MyTrait for MyStruct {}
 
/* Note that AsAny is automatically implemented for all 
    structs that implement Any, so there is no need to 
    implement it manually (in fact it won't compile if
    you try to) */
 
fn main() {
    // my_variable is now a trait object, which is the
    //  main use case for the AsAny trait.
    let my_variable: &dyn MyTrait = &MyStruct;
 
    let my_any_variable: &dyn Any = my_variable.as_any();
}

Without Using AsAny

Since rust doesn't (currently) have any built in way to upcast from a trait object to another trait (such as Any), this won't compile.

This example deliberately fails to compile
use core::any::Any;
 
struct MyStruct;
trait MyTrait {}
impl MyTrait for MyStruct {}
 
fn main() {
    let my_variable: &dyn MyTrait = &MyStruct;
 
    let my_any_variable: &dyn Any = my_variable;
}

Traits

AsAny

This trait allows anything that implements Any to be easily upcast to Any.