ordinal_map/lib.rs
1#![deny(rustdoc::broken_intra_doc_links)]
2#![deny(missing_docs)]
3// For cargo-rdme.
4#![allow(rustdoc::redundant_explicit_links)]
5
6//! The library provides [`Ordinal`](crate::Ordinal) trait to map types to `usize` values,
7//! proc-macro to derive `Ordinal` trait for structs and enums,
8//! and [`map`](crate::map) and [`set`](crate::set) implementations
9//! that use these types as keys efficiently.
10//!
11//! # Example
12//!
13//! ```
14//! use ordinal_map::map::total::OrdinalTotalMap;
15//! #[derive(ordinal_map::Ordinal)]
16//! enum ErrorCategory {
17//! Network,
18//! Disk,
19//! Logic,
20//! }
21//!
22//! fn classify_error(error: &str) -> ErrorCategory {
23//! // ...
24//! # ErrorCategory::Network
25//! }
26//!
27//! let mut error_counts: OrdinalTotalMap<ErrorCategory, u64> = OrdinalTotalMap::default();
28//!
29//! # let errors = [""; 0];
30//! for error in &errors {
31//! let category = classify_error(error);
32//! error_counts[&category] += 1;
33//! }
34//! ```
35
36#[cfg(test)]
37#[macro_use(quickcheck)]
38extern crate quickcheck_macros;
39
40pub(crate) mod array_as_mut;
41pub(crate) mod array_from_iter;
42mod atomic;
43pub mod map;
44mod ordinal;
45pub mod set;
46pub(crate) mod tests;
47mod values;
48
49pub use atomic::AtomicOrdinal;
50pub use ordinal::traits::Ordinal;
51pub use ordinal_map_derive::Ordinal;
52pub use values::OrdinalValues;
53pub(crate) mod array_builder;