Go to file
2014-06-12 17:33:41 +10:00
src Initial release. 2014-06-12 17:29:24 +10:00
.gitignore Initial release. 2014-06-12 17:29:24 +10:00
.travis.yml Initial release. 2014-06-12 17:29:24 +10:00
COPYRIGHT Initial release. 2014-06-12 17:29:24 +10:00
LICENSE-APACHE Initial release. 2014-06-12 17:29:24 +10:00
LICENSE-MIT Initial release. 2014-06-12 17:29:24 +10:00
Makefile Initial release. 2014-06-12 17:29:24 +10:00
README.md Miscellaneous bad commit message (for fun!). 2014-06-12 17:33:41 +10:00

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

Build Status

If youre familiar with Go and Go web frameworks, you may have come across the common “environment” pattern for storing data related to the request. Its 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.

This is madness. Hare-brained, stark, raving madness, just asking for things to blow up in your face. Unfortunately for people in Go, its the best that they can have because of its weak type system; such a thing cannot possibly be made safe without generics.

Fortunately, we can do better 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>:'static>, 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

make

Future work

I think that the only thing left for this is filling out additional methods from HashMap as appropriate.

Its a very simple thing.

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.