Go to file
2014-06-12 17:29:24 +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 Initial release. 2014-06-12 17:29:24 +10:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

``AnyMap``
==========

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](http://chrismorgan.info/) ([chris-morgan](https://github.com/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.