Crates.io | metatype |
lib.rs | metatype |
version | 0.2.1 |
source | src |
created_at | 2018-07-20 16:00:47.142054 |
updated_at | 2021-07-10 11:32:05.298843 |
description | Helper methods to determine whether a type is `TraitObject`, `Slice` or `Concrete`, and work with them respectively. |
homepage | https://github.com/alecmocatta/metatype |
repository | https://github.com/alecmocatta/metatype |
max_upload_size | |
id | 75225 |
size | 28,558 |
Helper methods to determine whether a type is TraitObject
, Slice
or Concrete
, and work with them respectively.
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);
This currently requires Rust nightly for the raw
, specialization
and arbitrary_self_types
features.
Licensed under either of
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.