代码之家  ›  专栏  ›  技术社区  ›  porton

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

  •  -1
  • porton  · 技术社区  · 2 年前

    实施时 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: :错误 可能是任何类型的。因此,我无法创建可转换为的类型 D: :错误

    如何应对这种情况?我几乎可以肯定有一些方法可以创建一个可以返回错误的反序列化程序,但我不知道怎么做。

    1 回复  |  直到 2 年前
        1
  •  1
  •   cafce25    2 年前

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