Skip to content

EFanZh/keyed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

keyed

.github/workflows/ci.yml docs

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages