Skip to content

Trivernis/trait-bound-typemap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Trait bound Typemap

This crate offers typemaps that restrict a given type in their trait and therefore offer additional trait implementations such as Clone and PartialEq.

Safety

This crate relies on the multi-trait-object crate which provides a workaround for storing a type erased object with all associated traits until this feature is implemented in the language itself. This crate will likely break when the fat pointer used by trait objects changes which it hasn't in a long time so far.

Usage

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>());
}

License

Apache-2.0

About

Rust typemaps with additional trait restrictions and implementations

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages