1

我正在尝试实现一个 Argonaut JSON 解码器实例,它将 JSON 字符串转换为我的 enum 实例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为 a DecodeResult,使用 Option 的内容,或者如果它是None.

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

4

1 回答 1

2

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

implicit def QuestionTypeDecodeJson: DecodeJson[QuestionType] = {
    DecodeJson(c => for {
      typeName <- c.as[String]
      questionType = DecodeResult.ok(QuestionType.fromString(typeName))
    } yield questionType)
}
于 2015-12-18T13:34:50.743 回答