5 releases
0.2.1 | Jul 10, 2021 |
---|---|
0.2.0 | Oct 18, 2019 |
0.1.2 | Jul 23, 2019 |
0.1.1 | Jul 20, 2018 |
0.1.0 | Jul 20, 2018 |
#1583 in Rust patterns
419 downloads per month
Used in 11 crates
(2 directly)
15KB
255 lines
metatype
Helper methods to determine whether a type is TraitObject
, Slice
or Concrete
, and work with them respectively.
Examples
assert_eq!(usize::METATYPE, MetaType::Concrete);
assert_eq!(any::Any::METATYPE, MetaType::TraitObject);
assert_eq!(<[u8]>::METATYPE, MetaType::Slice);
let a: Box<usize> = Box::new(123);
assert_eq!(Type::meta_type(&*a), MetaType::Concrete);
let a: Box<dyn any::Any> = a;
assert_eq!(Type::meta_type(&*a), MetaType::TraitObject);
let a = [123,456];
assert_eq!(Type::meta_type(&a), MetaType::Concrete);
let a: &[i32] = &a;
assert_eq!(Type::meta_type(a), MetaType::Slice);
let a: Box<dyn any::Any> = Box::new(123);
let meta: TraitObject = type_coerce(Type::meta(&*a));
println!("vtable: {:?}", meta.vtable);
Note
This currently requires Rust nightly for the raw
, specialization
and arbitrary_self_types
features.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE.txt or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT.txt or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.