in json/src/main/scala/com/gu/contentapi/json/CirceDecoders.scala [59:79]
final def apply(c: HCursor): Decoder.Result[CapiDateTime] = {
val maybeResult = c.value.asObject.map { obj =>
val map = obj.toMap
val result = for {
iso8601Json <- map.get("iso8601")
iso8601 <- iso8601Json.asString
dateTimeJson <- map.get("dateTime")
dateTime <- dateTimeJson.asNumber.flatMap(_.toLong)
} yield CapiDateTime.apply(dateTime, iso8601)
Either.fromOption(result, DecodingFailure("dateTimeDecoder: invalid object", c.history))
} orElse {
c.value.asString.map { dateTimeString =>
val dateTime = OffsetDateTime.parse(dateTimeString, formatter)
Either.right(CapiDateTime.apply(dateTime.toInstant.toEpochMilli(), DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(dateTime)))
}
}
maybeResult getOrElse Either.left(DecodingFailure("dateTimeDecoder: must be string or object", c.history))
}