rust 如何从“反序列化”返回错误?

11dmarpk  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(120)

实现Deserialize时,如何返回错误?

impl<'de> Deserialize<'de> for Response {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> {
        ... // Which error to return here?
    }
}

这里每个错误都必须可以转换成D::Error,但是D::Error可以是任何类型,所以我不能创建一个可以转换成D::Error的类型。
如何处理这种情况呢?我几乎可以肯定有某种方法可以创建一个可以返回错误的反序列化器,但我不知道该怎么做。

js5cn81o

js5cn81o1#

由于D::Error是实现serde::de::Error所必需的,因此您可以只使用Error::custom或其任何更具体的构造函数:

impl<'de> Deserialize<'de> for Response {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> {
        Err(<D::Error as serde::de::Error>::custom("your type imlementing `Display`"))
    }
}

相关问题