我需要一个函数来反序列化一个项目并将其设置为一个结构。我需要一个将项目设置为结构的函数,但该项目可能无法实现DeserializeOwned
. 我需要这样的东西:
struct SomeStruct<T> {
item: T,
}
impl<T> SomeStruct<T> {
pub fn set_item_from_json<D: DeserializeOwned>(&mut self, json: String) {
let item: D = serde_json::from_str(&json).unwrap();
self.item = item;
}
pub fn set_item(&mut self, item: T) {
self.item = item;
}
}
正如预期的那样,上面的代码不起作用,因为mismatched types [E0308] expected type parameter 'T', found type parameter 'D'
发生在set_item_from_json
. 我能做些什么?
where
子句可以约束现有的通用参数:或者,将其放入
impl
: