如何为枚举变量实现Borrow,以便我可以使用字符串切片作为HashMap的键?

时间:2018-05-31 22:37:04

标签: rust borrowing

在以下情形中:

#[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需要返回引用,因此似乎无效。

0 个答案:

没有答案