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;