1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//! # keyed
//!
//! Make implementing key-based comparison a little bit easier. Usage:
//!
//! 1. Implement [`Key`](`Key`) trait for your type.
//! 2. Wrap your value in a [`Keyed`](`Keyed`) structure.
//!
//! Example:
//!
//! ```rust
//! use keyed::{Key, Keyed};
//!
//! #[derive(Debug)]
//! struct Item<T> {
//! key: i32,
//! value: T,
//! }
//!
//! impl<T> Key for Item<T> {
//! type Output = i32;
//!
//! fn key(&self) -> Self::Output {
//! self.key
//! }
//! }
//!
//! let lhs = Keyed(Item { key: 4, value: 3 });
//! let rhs = Keyed(Item { key: 4, value: 7 });
//!
//! assert_eq!(lhs, rhs);
//! ```
//!
//! If your key is a reference to internal data, you can use [`RefKey`](`RefKey`) trait and [`RefKeyed`](`RefKeyed`)
//! wrapper:
//!
//! ```rust
//! use keyed::{RefKey, RefKeyed};
//!
//! #[derive(Debug)]
//! struct Item<T> {
//! key: i32,
//! value: T,
//! }
//!
//! impl<T> RefKey for Item<T> {
//! type Output = i32;
//!
//! fn key(&self) -> &Self::Output {
//! &self.key
//! }
//! }
//!
//! let lhs = RefKeyed(Item { key: 4, value: 3 });
//! let rhs = RefKeyed(Item { key: 4, value: 7 });
//!
//! assert_eq!(lhs, rhs);
//! ```
pub use crateKey;
pub use crateKeyed;
pub use crateRefKey;
pub use crateRefKeyed;