Make implementing key-based comparison a little bit easier. Usage:
Example:
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
trait and RefKeyed
wrapper:
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);