如何告诉编译器一个生存期必须比另一个生存期长?
use serde::{Deserialize, Serialize};
# [derive(Serialize, Deserialize, Debug)]
pub struct Tokens<'a> {
buffer: String,
list: Vec<Token<'a>>,
}
# [derive(Serialize, Deserialize, Debug)]
pub struct Token<'a> {
term: &'a str,
}
收益率
error: lifetime may not live long enough
--> src/pipeline/tokenizers/test.rs:6:5
|
3 | #[derive(Serialize, Deserialize, Debug)]
| ----------- lifetime `'de` defined here
4 | pub struct Tokens<'a> {
| -- lifetime `'a` defined here
5 | buffer: String,
6 | list: Vec<Token<'a>>,
| ^^^^ requires that `'de` must outlive `'a`
|
= help: consider adding the following bound: `'de: 'a`
在上面的代码中,token.term:&str将始终引用tokens.buffer的切片。我不确定如何指定该关系。我也不确定如何添加请求的绑定。
如果可以,那么神奇的语法是什么呢?
2条答案
按热度按时间weylhg0b1#
你不能给
derive
实现添加约束。你 * 可以 * 自己编写整个Deserialize
实现,并把约束放在通常的地方。但幸运的是,serde
想到了这个用例。如果你向serde
指示数据应该 * 从 * 反序列化器借用,它会为你把约束放在里面。t3psigkw2#
您可以使用属性
#[serde(borrow)]
,让产生的Deserialize
实作借用数据。请参阅: