Crate fast_map

Source
Expand description

A small library and custom derive to create a map-like struct that uses match expressions to get and insert values.

If you know your keys at compile-time, this library will likely be faster than HashMap for supported map operations.

Provides the following operations on the wrapping struct (via derive macros):

  • MyMap::get, returns Result<Option<&V>, Error>
  • MyMap::get_mut, returns Result<Option<&mut V>, Error>
  • MyMap::insert, returns Result<Option<V>, Error>, where V is the old value if one exists
  • MyMap::remove, returns Result<Option<V>, Error>
  • MyMap::values, returns an iterator over &Vs

If you know that your operations cannot fail (e.g. if your key type is an enum, and you list all variants as keys), you can add infallible = true to your derive attributes, which will unwrap the result of your map operations.

§Usage


fn main() {
    pub enum A { A, B, C, D };

    #[derive(Default, fast_map::FastMap)]
    // We know this cannot fail, since we list all the `enum` variants, so we add `infallible = true`
    #[fast_map(infallible = true, keys(A::A, A::B, A::C, A::D))]
    struct Foo(fast_map::Map4<A, String>);

    let mut foo = Foo::default();

    foo.insert(A::B, "B".into());

    assert_eq!(foo.get(A::B), Some(&"B".to_string()));

    assert_eq!(foo.get(A::C), None);

    foo.insert(A::C, "C".into());

    assert_eq!(foo.values().collect::<Vec<_>>().len(), 2);
}

§Changelog

§0.2.1

  • Add the non-erroring operations back as depending on macro attribute (infallible = true). Default is false.

§0.2.0

  • Removed easy and strict MapLike traits. It’s better to handle unknown keys explicitly, even for gets.
  • Added get_mut operation to the wrapping struct

Structs§

  • Container for a map with 1 field
  • Container for a map with 2 fields
  • Container for a map with 3 fields
  • Container for a map with 4 fields
  • Container for a map with 5 fields
  • Container for a map with 6 fields
  • Container for a map with 7 fields
  • Container for a map with 8 fields
  • Container for a map with 9 fields
  • Container for a map with 10 fields
  • Container for a map with 11 fields
  • Container for a map with 12 fields
  • Container for a map with 13 fields
  • Container for a map with 14 fields
  • Container for a map with 15 fields
  • Container for a map with 16 fields
  • Container for a map with 17 fields
  • Container for a map with 18 fields
  • Container for a map with 19 fields
  • Container for a map with 20 fields
  • Container for a map with 21 fields
  • Container for a map with 22 fields
  • Container for a map with 23 fields
  • Container for a map with 24 fields
  • Container for a map with 25 fields
  • Container for a map with 26 fields
  • Container for a map with 27 fields
  • Container for a map with 28 fields
  • Container for a map with 29 fields
  • Container for a map with 30 fields
  • Container for a map with 31 fields
  • Container for a map with 32 fields
  • Container for a map with 48 fields
  • Container for a map with 64 fields
  • Iterator over existing values

Enums§

  • Currently just KeyNotFound

Derive Macros§