summaryrefslogtreecommitdiffstats
path: root/third_party/rust/indexmap/src/equivalent.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/indexmap/src/equivalent.rs')
-rw-r--r--third_party/rust/indexmap/src/equivalent.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/third_party/rust/indexmap/src/equivalent.rs b/third_party/rust/indexmap/src/equivalent.rs
new file mode 100644
index 0000000000..ad6635ffac
--- /dev/null
+++ b/third_party/rust/indexmap/src/equivalent.rs
@@ -0,0 +1,27 @@
+use core::borrow::Borrow;
+
+/// Key equivalence trait.
+///
+/// This trait allows hash table lookup to be customized.
+/// It has one blanket implementation that uses the regular `Borrow` solution,
+/// just like `HashMap` and `BTreeMap` do, so that you can pass `&str` to lookup
+/// into a map with `String` keys and so on.
+///
+/// # Contract
+///
+/// The implementor **must** hash like `K`, if it is hashable.
+pub trait Equivalent<K: ?Sized> {
+ /// Compare self to `key` and return `true` if they are equal.
+ fn equivalent(&self, key: &K) -> bool;
+}
+
+impl<Q: ?Sized, K: ?Sized> Equivalent<K> for Q
+where
+ Q: Eq,
+ K: Borrow<Q>,
+{
+ #[inline]
+ fn equivalent(&self, key: &K) -> bool {
+ *self == *key.borrow()
+ }
+}