【发布时间】:2021-08-05 03:55:22
【问题描述】:
此函数来自 serde_json 文档:
fn read_user_from_file<P: AsRef<Path>>(path: P) -> Result<User, Box<dyn Error>> {
// Open the file in read-only mode with buffer.
let file = File::open(path)?;
let reader = BufReader::new(file);
// Read the JSON contents of the file as an instance of `User`.
let u = serde_json::from_reader(reader)?;
// Return the `User`.
Ok(u)
}
我想让它更通用,这样我就可以反序列化为任何类型的对象。然后,我可以将该函数用于多个对象。
fn read_user_from_file<T,P: AsRef<Path>>(path: P) -> Result<T, Box<dyn Error>> {
// Open the file in read-only mode with buffer.
let file = File::open(path)?;
let reader = BufReader::new(file);
let t:T = serde_json::from_reader(reader)?;
// Return the `User`.
Ok(t)
}
但是serde_json::from_reader 行上的错误消息是:
trait bound for<'de> T: models::_::_serde::Deserialize<'de> 不满足
需要,因为对 DeserializeOwned 的 impl 的要求 TrustcE0277
lib.rs(1, 1):在这个范围内需要
de.rs(2500, 8):from_reader 中的此绑定所需
blocks.rs(62, 17):考虑限制类型参数T
【问题讨论】:
标签: rust