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