final def apply()

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))
    }