Module features

Module features 

Source
Expand description

§Cargo features

  • stable (default): Uses the ptr_meta crate for pointer metadata operations.
  • nightly: Uses nightly Rust’s built-in ptr_metadata feature.

§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())
}