我如何使用现有的显示特征的实施落实序列化?(How can I implement Serializ

2019-10-29 06:11发布

我想实现Serialize在一个外部的箱型特征,但它禁止。 我看了一下SERDE的远程派生 ,但似乎很多工作改写类型。

在我的情况下,所有我想序列化的类型实现Display特性,并进行序列化,我只是想使用该特性。

我会怎么做呢?

Answer 1:

这里是我的尝试(注意:我是OP):

use serde::{Serialize, Serializer};
use std::io::Error;
use std::fmt::Display;

#[derive(Debug, Serialize)]
pub enum MyError {
    Custom,
    #[serde(serialize_with = "use_display")]
    Io(Error)
}

fn use_display<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
where
    T: Display,
    S: Serializer
{
    serializer.collect_str(value)
}

操场

但有可能这样做的更简单的方法?



文章来源: How can I implement Serialize using an existing Display trait implementation?
标签: rust serde