#container #data-structure #map

anymap

A safe and convenient store for one value of each type

21 releases

0.12.1 Jan 20, 2017
0.12.0 Mar 5, 2016
0.11.2 Jan 22, 2016
0.11.1 Jun 24, 2015
0.9.2 Nov 28, 2014

#179 in Data structures

Download history 1836/week @ 2019-07-31 1989/week @ 2019-08-07 2107/week @ 2019-08-14 2105/week @ 2019-08-21 3154/week @ 2019-08-28 3445/week @ 2019-09-04 2444/week @ 2019-09-11 2601/week @ 2019-09-18 3063/week @ 2019-09-25 3997/week @ 2019-10-02 3495/week @ 2019-10-09 2397/week @ 2019-10-16 3217/week @ 2019-10-23 2274/week @ 2019-10-30 2675/week @ 2019-11-06

4,594 downloads per month
Used in 68 crates (18 directly)

MIT/Apache

39KB
722 lines

AnyMap, a safe and convenient store for one value of each type

Build Status

If you’re familiar with Go and Go web frameworks, you may have come across the common “environment” pattern for storing data related to the request. It’s typically something like map[string]interface{} and is accessed with arbitrary strings which may clash and type assertions which are a little unwieldy and must be used very carefully. (Personally I would consider that it is just asking for things to blow up in your face.) In a language like Go, lacking in generics, this is the best that can be done; such a thing cannot possibly be made safe without generics.

As another example of such an interface, JavaScript objects are exactly the same—a mapping of string keys to arbitrary values. (There it is actually more dangerous, because methods and fields/attributes/properties are on the same plane.)

Fortunately, we can do better than these things in Rust. Our type system is quite equal to easy, robust expression of such problems.

The AnyMap type is a friendly wrapper around a HashMap<TypeId, Box<Any>>, exposing a nice, easy typed interface, perfectly safe and absolutely robust.

What this means is that in an AnyMap you may store zero or one values for every type.

Instructions

Cargo all the way: it is anymap on crates.io.

For users of the nightly instead of the beta of rustc there are a couple of things behind the unstable feature like a drain method on the RawAnyMap and a more efficient hashing technique which makes lookup in the map a tad faster.

Author

Chris Morgan (chris-morgan) is the primary author and maintainer of AnyMap.

License

This library is distributed under similar terms to Rust: dual licensed under the MIT license and the Apache license (version 2.0).

See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.

No runtime deps