保留大小合适的切片

时间:2018-07-17 19:30:45

标签: arrays rust slice

我有一个结构Message如下:

struct Message<'a> {
    message_type: String,
    data: &'a [u8],
}

socketcan库具有CANFrame::data方法,该方法返回&[u8]

我不想将其复制到向量中,因为我希望它们全部保留在堆栈上的Message对象中,但是我想将数据从一个移到另一个。

match socket.read_frame() {
    Ok(frame) => {
        let message = Message {
            message_type: format!("{}", frame.id()),
            data: frame.data().clone(),
        };

但是,结果frame.data()的寿命不足,因为框架的范围很短(并且应该很短):

error[E0597]: `frame` does not live long enough
  --> src/main.rs:27:31
   |
27 |                         data: frame.data().clone(),
   |                               ^^^^^ borrowed value does not live long enough
...
39 |             }
   |             - borrowed value only lives until here
   |
   = note: borrowed value must be valid for the static lifetime...

我知道切片最多只能包含8个元素,因为这是CAN协议的局限性。我真正想要的是一个既包含[u8]也包含usize(或u8也有效)的结构,因此可以将其转换为具有正确大小的切片。 / p>

我只是想弄清楚将CANFrame中的数据移动(在英语中为“移动”,因为我可能不想在这里使用移动语义-不确定)的惯用方式。 Message

0 个答案:

没有答案