我正在尝试使用通用成员序列化结构,但由于sns_pub::_IMPL_DESERIALIZE_FOR_Message::_serde::Serialize
对sns_pub::Message<T>
的隐含要求而导致出现错误'
#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(bound(
serialize = "T: Serialize",
deserialize = "T: Deserialize<'de>",
))]
struct Message<T> {
topic: String,
message_id: String,
created_date: DateTime<Utc>,
message: T,
subject: String
}
let msg = String::from("TEST_MESSAGE");
let message = Message {
topic: self.topic.clone(),
message_id: id.to_string(),
created_date: now,
subject: self.subject.clone(),
message: msg
};
let filename = format!("{}/{}_{}", self.folder_path, prefix, id);
let mut file = File::create(filename.clone())?;
file.write_all(serde_yaml::to_string(&message)?.as_str())?;
error[E0277]: the trait bound `T: sns_pub::_IMPL_DESERIALIZE_FOR_Message::_serde::Serialize` is not satisfied
--> src/sns_pub.rs:57:46
|
43 | impl<T> SnsPub<T> for DiskSnsPub {
| - help: consider restricting this bound: `T: sns_pub::_IMPL_DESERIALIZE_FOR_Message::_serde::Serialize` ...
57 | file.write_all(serde_yaml::to_string(&message)?.as_str())?;
| ^^^^^^^^ the trait `sns_pub::_IMPL_DESERIALIZE_FOR_Message::_serde::Serialize` is not implemented for `T`
| ::: /home/moharaza/.cargo/registry/src/github.com-1ecc6299db9ec823/serde_yaml-0.8.11/src/ser.rs:421:8
|
421 | T: ser::Serialize,
| -------------- required by this bound in `serde_yaml::ser::to_string`
|
= note: required because of the requirements on the impl of `sns_pub::_IMPL_DESERIALIZE_FOR_Message::_serde::Serialize` for `sns_pub::Message<T>`
error[E0308]: mismatched types
答案 0 :(得分:0)
提供的代码缺少很多信息,而错误实际上是由您未提供的代码引起的。这就是为什么提供[reprex]很重要的原因。
但是,我可以猜到其中的某些代码实际上来自Message
方法,因为它使用self
。您错过的只是定义该方法的impl块的边界T
:
impl<T> Message<T>
where
T: Serialize + for<'de> Deserialize<'de>,
{
/// methods go here
{
我知道这一点,因为错误消息已经完全告诉您了。