Crate keyed

Source
Expand description

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

Structs§

  • A wrapper for data structures that implements Key trait.
  • A wrapper for data structures that implements RefKey trait.

Traits§

  • Trait for extracting key from a data structure.
  • Trait for extracting key that is a reference to internal data from a data structure.