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