Argonaut - 在自定义解码器中返回错误



我正在尝试实现一个Argonaut JSON解码器实例,该实例将JSON字符串转换为我的枚举QuestionType的实例。问题是,如果字符串无效,返回的 DecodeResult 应该是一个错误,我不确定该怎么做。

我的代码目前如下所示:

implicit def QuestionTypeDecodeJson: DecodeJson[QuestionType] = {
    DecodeJson(c => for {
      typeName <- c.as[String]
      questionType = QuestionType.fromString(typeName).get
    } yield questionType)
  }

QuestionType.fromString(typeName)返回一个Option。理想情况下,与其使用 get ,我想将Option转换为 DecodeResult ,其中包含选项的内容,或者如果None错误状态。

我可以使用 DecodeResult 的构造函数,但说实话,它的签名对我来说很困惑(我是 scala 的新手(。似乎它需要一个CursorHistory对象,我不确定我应该在那里传递什么。

DecodeResult 对象有一个"ok"和一个"fail"方法。

implicit def QuestionTypeDecodeJson: DecodeJson[QuestionType] = {
    DecodeJson(c => for {
      typeName <- c.as[String]
      questionType = DecodeResult.ok(QuestionType.fromString(typeName))
    } yield questionType)
}

最新更新