我有一个结构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
。