Expand description
§Cargo features
stable(default): Uses theptr_metacrate for pointer metadata operations.nightly: Uses nightly Rust’s built-inptr_metadatafeature.
§Usage
On stable Rust (default), annotate traits with #[multi_any]:
use multi_any::*;
#[multi_any]
trait SomeTrait {}
#[derive(MultiAny)]
#[multi_any(SomeTrait)]
struct Foo;
impl SomeTrait for Foo {}
let foo: Box<dyn MultiAny> = Box::new(Foo);
assert!(foo.downcast_ref::<dyn SomeTrait>().is_some())On nightly Rust with “nightly” feature enable it is possible to omit #[multi_any]
#[cfg(feature="nightly")]
{
use multi_any::*;
// no annotation here
trait SomeTrait {}
#[derive(MultiAny)]
#[multi_any(SomeTrait)]
struct Foo;
impl SomeTrait for Foo {}
let foo: Box<dyn MultiAny> = Box::new(Foo);
assert!(foo.downcast_ref::<dyn SomeTrait>().is_some())
}