В следующем сценарии:
#[derive(PartialEq, Eq, Hash)]
struct Key(String);
fn get_from_map(map: HashMap<Key, i32>, key: &str) {
// ???
}
Я могу реализовать это с помощью трейта Borrow
, поэтому мне не нужен &Key
, достаточно &str
:
impl Borrow<str> for Key {
fn borrow(&self) -> &str {
&self.0
}
}
fn get_from_map(map: HashMap<Key, i32>, key: &str) {
map.get(key);
}
Однако, когда мой ключ является перечислением, реализовать Borrow
невозможно:
#[derive(PartialEq, Eq, Hash)]
enum Key {
Text(String),
Binary(Vec<u8>)
}
fn get_from_map(map: HashMap<Key, i32>, key: &str) {
// ???
}
Есть ли эргономичный способ реализовать get_from_map
, без клонирования key
, чтобы он каким-то образом искал только Text
ключи?
Мой первый инстинкт — внедрить Borrow
для нового типа BorrowedKey
, но это, похоже, не работает, поскольку Borrow
нужно возвращать ссылку.