如何从"deserialize"函数中返回错误?

3

在实现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 的类型。
如何处理这种情况?我几乎肯定有一些方法可以创建一个可以返回错误的反序列化程序,但我不知道怎么做。
1个回答

4

既然需要实现serde::de::Error,那么就可以使用Error::custom或者它更具体的构造函数来实现D::Error

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`"))
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接