Go to file
Chris Morgan 0e65782e65 0.9.7: parity with the collections API
There’s some Rust updating here too.

This entails the addition of various methods and iterator types where
appropriate, based on what’s on `HashMap`, though I doubt that people
will actually be able to make all that much use of the iterators. They’d
be of more use with a basis of a trait other than `Any`, such as might
be conveniently achieved by combining this with my MOPA crate.
(Getting a little close to HKT there, innit?)

You know, I wonder sometimes if anyone ever reads these messages after
they are written, myself included. If you have read this, please drop me
a note; I’m curious.

I’ve also gone over all the stability attributes, marking things as
appropriate.
2015-01-07 20:51:13 +11:00
src 0.9.7: parity with the collections API 2015-01-07 20:51:13 +11:00
.gitignore Ignore Cargo.lock (this is a library). 2014-08-22 19:12:54 -07:00
.travis.yml Can I diagnose the problem with Rust CI? 2014-11-07 17:08:14 +11:00
Cargo.toml 0.9.7: parity with the collections API 2015-01-07 20:51:13 +11: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
README.md Drop the Makefile in favour of Cargo. 2014-11-07 16:45:12 +11: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. (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 + '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

Cargo all the way.

The documentation, with examples, is also available online.

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. (The initial implementation time was under ten minutes.)

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.