Rust library which implements a version of the Any trait for types which contains borrows.
This crate contains unsafe code which has not been properly vetted so this crate may not be safe to use.
#[macro_use]
extern crate any_ref;
use any_ref::AnyRef;
struct MyWrapper(i32);
any_ref!(MyWrapper);
# #[allow(dead_code)]
struct MyType<T, U>(T, U);
any_ref!(MyType<T, U>);
struct MyRef<'a, T: 'a, U>(&'a T, U);
any_ref!(MyRef<'a, T, U>);
fn main() {
let x = MyWrapper(1);
assert!((&x as &AnyRef).is::<MyWrapper>());
assert!(!(&x as &AnyRef).is::<i32>());
let r = MyRef(&x, ());
let ar = &r as &AnyRef;
assert!(ar.is::<MyRef<MyWrapper, ()>>());
assert!(ar.downcast_ref::<MyRef<MyWrapper, ()>>().is_some());
// Would be a compile error
// assert!((&r as &AnyRef).is::<MyRef<'static, MyWrapper, ()>>());
}