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

Argonaut - Returning an error in a custom decoder

我正在尝试实现一个 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) returns 一个 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)
}