multi-any 0.1.1

`MultiAny` is just like `Any` but can downcast to trait objects.
Documentation
use multi_any::{Meta, MultiAny, multi_any};
use std::any::TypeId;

#[test]
fn test_wrong_dyn_trait_type() {
    // Here we test that the library is sound even if MultiAny is implemented incorrectly
    #[multi_any]
    trait Trait {}
    #[multi_any]
    trait WrongTrait {}
    struct Bar;
    impl Trait for Bar {}
    impl WrongTrait for Bar {}

    impl MultiAny for Bar {
        fn get_metadata(&self, type_id: TypeId) -> Option<Meta> {
            _ = type_id;
            // try to use type_id not matching the supplied reference
            Meta::try_from(self, TypeId::of::<dyn WrongTrait>(), |v| v as &dyn Trait)
        }
    }

    let bar: Box<dyn MultiAny> = Box::new(Bar);
    assert!(bar.downcast_ref::<dyn Trait>().is_none());
    assert!(bar.downcast_ref::<dyn WrongTrait>().is_none());
}

#[test]
#[should_panic = "Wrong Metadata type"]
fn test_wrong_dyn_trait_type_panic() {
    // Here we test that the library is sound even if MultiAny is implemented incorrectly
    #[multi_any]
    trait Trait {}
    #[multi_any]
    trait WrongTrait {}
    struct Bar;
    impl Trait for Bar {}
    impl WrongTrait for Bar {}

    impl MultiAny for Bar {
        fn get_metadata(&self, type_id: TypeId) -> Option<Meta> {
            _ = type_id;
            // return metadata for WrongTrait regardless of what was requested
            Meta::try_from(self, TypeId::of::<dyn WrongTrait>(), |v| {
                v as &dyn WrongTrait
            })
        }
    }

    let bar: Box<dyn MultiAny> = Box::new(Bar);
    bar.downcast_ref::<dyn Trait>();
}

#[test]
#[should_panic = "Wrong Data type"]
fn test_wrong_data_type_panic() {
    // Here we test that the library is sound even if MultiAny is implemented incorrectly
    #[multi_any]
    trait Trait {}
    struct Bar;
    struct Baz;
    impl Trait for Bar {}
    impl Trait for Baz {}

    impl MultiAny for Bar {
        fn get_metadata(&self, type_id: TypeId) -> Option<Meta> {
            // returning metadata for right dyn trait but wrong data type
            Meta::try_from(&Baz, type_id, |v| v as &dyn Trait)
        }
    }

    let bar: Box<dyn MultiAny> = Box::new(Bar);
    bar.downcast_ref::<dyn Trait>();
}