# `once_map`
[](https://crates.io/crates/once_map)
[](https://docs.rs/once_map/)

This crate provides `OnceMap`, a type of `HashMap` where entries can be written with a shared reference,
but can be written ony once. This is similar to [`once_cell`], but with a map.
This enables to reference values inside the map for the lifetime of the map, without the need
of further locks.
This makes this type perfect for implementation of caches. A type `LazyMap` is provided for such cases.
This crate provides such a map heavily optimized for concurrent use, but also a single-threaded version.
[`once_cell`]: https://docs.rs/once_cell
# Example
```rust
let map = OnceMap::new();
// All these are `&str` pointing directly in the map.
// Note that we don't need a mutable reference, so we can have several of
// them at the same time.
assert_eq!(roses, "red");
assert_eq!(violets, "blue");
assert_eq!(sugar, "sweet");
// The closure is never run here, because we already have a value for "rose"