#traits #key #comparison #specifying

no-std keyed

Implement comparison traits by specifying a key

1 unstable release

0.1.3 Feb 21, 2021
0.1.2 Feb 21, 2021
0.1.1 Feb 21, 2021
0.1.0 Feb 21, 2021

#2535 in Data structures

46 downloads per month

MIT license

11KB
254 lines

keyed

.github/workflows/ci.yml docs

Implement comparison traits by specifying a key, this may make implementing key-based comparison a little bit easier.


lib.rs:

keyed

Make implementing key-based comparison a little bit easier. Usage:

  1. Implement Key trait for your type.
  2. Wrap your value in a Keyed structure.

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);

No runtime deps