1use std::borrow::Borrow;
4use std::cmp::Ordering;
5
6pub trait Equivalent<K: ?Sized> {
11 fn equivalent(&self, key: &K) -> bool;
13}
14
15impl<Q: ?Sized, K: ?Sized> Equivalent<K> for Q
16where
17 Q: Eq,
18 K: Borrow<Q>,
19{
20 #[inline]
21 fn equivalent(&self, key: &K) -> bool {
22 PartialEq::eq(self, key.borrow())
23 }
24}
25
26pub trait Comparable<K: ?Sized>: Equivalent<K> {
28 fn compare(&self, key: &K) -> Ordering;
30}
31
32impl<Q: ?Sized, K: ?Sized> Comparable<K> for Q
33where
34 Q: Ord,
35 K: Borrow<Q>,
36{
37 #[inline]
38 fn compare(&self, key: &K) -> Ordering {
39 Ord::cmp(self, key.borrow())
40 }
41}