采用以下代码片段(必须在货物中运行,以便您可以将serde
功能添加到num-bigint
):
use num_bigint::BigInt;
use serde_derive::Deserialize;
use std::collections::HashMap;
#[derive(Debug, Deserialize)]
pub struct Trade<'a> {
pub id: &'a str,
pub price: BigInt,
pub quantity: BigInt,
}
#[derive(Debug, Deserialize)]
pub struct TradeTable<'a> {
pub trades: Vec<Trade<'a>>,
}
fn main() {
let mut ether_trades: Vec<Trade> = Vec::new();
ether_trades.push(Trade {
id: "#1",
price: BigInt::from(100),
quantity: BigInt::from(2)
});
let mut trades: HashMap<&str, Vec<Trade>> = HashMap::new();
trades.insert("ETH", ether_trades);
println!("trades: {}", trades);
}
Run Code Online (Sandbox Code Playgroud)
编译时会出现此错误:
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'de` due to conflicting requirements
Run Code Online (Sandbox Code Playgroud)
还有这个注意事项:
note: first, the lifetime cannot outlive the lifetime `'de` as defined on the impl at 34:17...
Run Code Online (Sandbox Code Playgroud)
现在,我明白我需要'a
缩短寿命'de
,但我该怎么做呢?我不知道'de
生命周期在哪里定义。我尝试使用这样的冒号:
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'de` due to conflicting requirements
Run Code Online (Sandbox Code Playgroud)
但这没有用。
请检查那个
TL; 博士
#[derive(Debug, Deserialize)]
pub struct TradeTable<'a> {
#[serde(borrow)]
pub trades: Vec<Trade<'a>>,
}
Run Code Online (Sandbox Code Playgroud)