无法理解此错误:当类型参数"T"出现在第一个本地类型之前时,它必须由另一个类型覆盖



当我尝试下面的代码时(这是一个重现我的问题的小例子(,我从编译器那里得到了这个错误:

error[E0210]: type parameter `T` must be covered by another type when it appears before the first local type (`Message`)
use serde::{Serialize, Deserialize};
// A simple struct that can be serialized and deserialized
#[derive(Debug, Serialize, Deserialize)]
struct MyStruct(u64, String);
// A struct Message that can be converted into any deserializable object
struct Message(String);
impl<T: for<'a> Deserialize<'a>> TryFrom<Message> for T {
type Error = serde_json::Error;
fn try_from(value: Message) -> Result<Self, Self::Error> {
serde_json::from_str(value.0)
}
}
fn main() {
let my_message = Message(
serde_json::to_string(MyStruct(123, "Hello".to_string()))
);

let result_from_message = MyStruct::TryFrom(my_message).unwrap();
println!("{result_from_message:?}");
}

我不太明白,我能帮忙吗?

感谢大家的帮助,我想我现在明白了!

我终于用这种方式重新思考我的代码:

use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
struct MyStruct(u64, String);
struct Message(String);
impl Message {
fn into<T: DeserializeOwned>(self) -> Result<T, serde_json::Error> {
serde_json::from_str(&self.0)
}
}
fn main() {
let message =
Message(serde_json::to_string(&MyStruct(58, "Hello, World!".to_string())).unwrap());
let my_struct = message.into::<MyStruct>().unwrap();
println!("{my_struct:?}");
}

相关内容

最新更新