#traits #bounds #typemap #restrictions #partial-eq #object #typemaps

trait-bound-typemap

一个用于创建具有额外特质限制和实现的类型映射的包

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

Apache-2.0

17KB
396

特质绑定 Typemap

此包提供类型映射,这些映射限制了它们的特质,因此提供了额外的特质实现,例如 ClonePartialEq

安全性

此包依赖于 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