maglev/lib.rs
1//! Maglev hashing - A consistent hashing algorithm from Google
2//!
3//! [Maglev: A Fast and Reliable Software Network Load Balancer](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/44824.pdf)
4//!
5//! # Example
6//!
7//! ```rust
8//! use maglev::*;
9//!
10//! let m = Maglev::new(vec!["Monday",
11//! "Tuesday",
12//! "Wednesday",
13//! "Thursday",
14//! "Friday",
15//! "Saturday",
16//! "Sunday"]);
17//!
18//! assert_eq!(m["alice"], "Friday");
19//! assert_eq!(m["bob"], "Wednesday");
20//!
21//! // When the node list changed, ensure to use same `capacity` to rebuild the lookup table.
22//!
23//! let m = Maglev::with_capacity(vec!["Monday",
24//! // "Tuesday",
25//! "Wednesday",
26//! // "Thursday",
27//! "Friday",
28//! "Saturday",
29//! "Sunday"],
30//! m.capacity());
31//!
32//! assert_eq!(m["alice"], "Friday");
33//! assert_eq!(m["bob"], "Wednesday");
34//! ```
35//!
36//! Maglev use `std::collections::hash_map::DefaultHasher` by default,
37//! we could use the given hash builder to hash keys.
38//!
39//! ```rust
40//! extern crate fasthash;
41//! extern crate maglev;
42//!
43//! use fasthash::spooky::Hash128;
44//!
45//! use maglev::*;
46//!
47//! fn main() {
48//! let m = Maglev::with_hasher(vec!["Monday",
49//! "Tuesday",
50//! "Wednesday",
51//! "Thursday",
52//! "Friday",
53//! "Saturday",
54//! "Sunday"],
55//! Hash128 {});
56//!
57//! assert_eq!(m["alice"], "Monday");
58//! assert_eq!(m["bob"], "Wednesday");
59//! }
60//! ```
61mod conshash;
62mod maglev;
63
64pub use crate::conshash::ConsistentHasher;
65pub use crate::maglev::Maglev;