Initial release.
[anymap] / README
1 ``AnyMap``
2 ==========
3
4 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.
5
6 This is madness. Hare-brained, stark, raving madness, just *asking* for things to blow up in your face. Unfortunately for people in Go, it’s the best that they can have because of its weak type system; such a thing cannot possibly be made safe without generics.
7
8 Fortunately, we can do better in Rust. Our type system is quite equal to easy, robust expression of such problems.
9
10 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.
11
12 What this means is that in an ``AnyMap`` you may store zero or one values for every type.
13
14 Instructions
15 ------------
16
17 make
18
19 Future work
20 -----------
21
22 I think that the only thing left for this is filling out additional methods from ``HashMap`` as appropriate.
23
24 It’s a very simple thing.
25
26 Author
27 ------
28
29 [Chris Morgan](http://chrismorgan.info/) ([chris-morgan](https://github.com/chris-morgan)) is the primary author and maintainer of AnyMap.
30
31 License
32 -------
33
34 This library is distributed under similar terms to Rust: dual licensed under the MIT license and the Apache license (version 2.0).
35
36 See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.