#trait-object #upcast

no-std as_any_min

A minuscule rust library that allows trait objects to be easily upcast to Any

3 stable releases

1.0.2 Oct 25, 2020

#273 in No standard library

MIT license

5KB

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.

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;
}

License: MIT

No runtime deps