一般来说,你不应该在结构上写 Serde 特征边界 https://github.com/serde-rs/serde/issues/964.
rustc --explain E0283
解释你的问题:
当编译器没有足够的信息来明确选择实现时,会发生此错误
我发现使用#[serde(bound()] https://serde.rs/attr-bound.html声明边界使示例编译:
#[derive(PartialEq, Serialize, Deserialize)]
pub struct Record<'a, T: 'a> {
id: &'a str,
created_at: &'a str,
created_by: Option<&'a str>,
last_updated_at: Option<&'a str>,
#[serde(bound(deserialize = "&'a T: Deserialize<'de>"))]
object: &'a T,
}
作为另一种解决方案,如T
是通用的,可以作为参考,考虑更改Record
定义,因此 Serde 不需要更明确的指示:
#[derive(PartialEq, Serialize, Deserialize)]
pub struct Record<'a, T: 'a> {
id: &'a str,
created_at: &'a str,
created_by: Option<&'a str>,
last_updated_at: Option<&'a str>,
object: T,
}
impl<'a, T: 'a> Record<'a, T> {
pub fn new(
id: &'a str,
created_at: &'a str,
created_by: Option<&'a str>,
last_updated_at: Option<&'a str>,
object: T,
) -> Self {
Record {
id,
created_at,
created_by,
last_updated_at,
object,
}
}
}