将具有String字段的结构借给具有&str字段的结构?

时间:2018-08-06 11:39:11

标签: rust

我有一个HashMap<Node, u32>,我要搜索的是使用&str而不是String;有可能吗?

use std::collections::HashMap;

#[derive(PartialEq, Hash, Eq, Clone, Copy, Debug)]
enum NodeType {
    A,
    B,
}

#[derive(PartialEq, Hash, Eq, Clone, Debug)]
struct Node {
    id: String,
    code: u8,
    node_type: NodeType,
}

#[derive(PartialEq, Hash, Eq, Clone, Debug)]
struct NodeRef<'a> {
    id: &'a str,
    code: u8,
    node_type: NodeType,
}

fn main() {
    let m = HashMap::<Node, u32>::new();
    let x = NodeRef {
        id: "aaaa",
        code: 5,
        node_type: NodeType::A,
    };
    m.get(&x);
}

如果添加以下代码,则会编译:

impl<'a> Borrow<NodeRef<'a>> for Node {
    fn borrow(&self) -> &NodeRef<'a> {
       unimplemented!();
    }
}

我不知道如何实现borrow方法:

impl<'a> Borrow<NodeRef<'a>> for Node {
    fn borrow(&self) -> &NodeRef<'a> {
        &NodeRef {
            id: self.id.as_str(),
            code: self.code,
            node_type: self.node_type,
        }
    }
}

由于引用了临时变量,因此无法编译。我看到每个线程使用一个全局NodeRef的一种方法,还有其他方法吗?

0 个答案:

没有答案