我正在尝试实现一个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
,其中包含Option的内容,或者如果错误状态为None
,则为错误状态。我可以使用
DecodeResult
的构造函数,但是老实说,它的签名让我很困惑(我对scala还是陌生的)。似乎它需要一个CursorHistory
对象,并且我不确定应该在其中传递什么。 最佳答案
DecodeResult对象具有“确定”和“失败”方法。
implicit def QuestionTypeDecodeJson: DecodeJson[QuestionType] = {
DecodeJson(c => for {
typeName <- c.as[String]
questionType = DecodeResult.ok(QuestionType.fromString(typeName))
} yield questionType)
}