6 个版本
0.3.3 | 2022年3月16日 |
---|---|
0.3.2 | 2022年3月16日 |
0.2.0 | 2022年3月15日 |
0.1.0 | 2022年3月14日 |
#11 in #typemap
用于 bromine
17KB
396 行
特质绑定 Typemap
此包提供类型映射,这些映射限制了它们的特质,因此提供了额外的特质实现,例如 Clone
和 PartialEq
。
安全性
此包依赖于 multi-trait-object 包,该包提供了一个绕过方法,用于在语言本身实现该功能之前存储具有所有相关特质的类型擦除对象。如果特质的胖指针发生变化(它已经很长时间没有变化了),则此包可能会损坏。
用法
use trait_bound_typemap::{CloneTypeMap, AnyTypeMap, TypeMap, TypeMapKey};
#[derive(Clone)]
pub struct MyStruct {
a: u8,
b: String,
}
pub struct MyStructKey;
impl TypeMapKey for MyStructKey {
type Value = MyStruct;
}
fn main() {
let mut map = CloneTypeMap::new();
let value = MyStruct {a: 5, b: String::from("Hello World")};
map.insert::<MyStructKey>(value);
assert!(map.contains_key::<MyStructKey>());
// can be cloned
let map2 = map.clone();
assert!(map.contains_key::<MyStructKey>());
// less restrictive is always allowed
let any_map = AnyTypeMap::from_iter(map2);
assert!(map.contains_key::<MyStructKey>());
}
许可证
Apache-2.0
依赖关系
~18KB