in json/src/main/scala/com/gu/contentapi/json/CirceEncoders.scala [26:46]
private def pascalCaseToHyphenated(s: String): String =
LowerCaseFollowedByUpperCase.replaceAllIn(s, m => m.group(1) + "-" + m.group(2)).toLowerCase
implicit def thriftEnumEncoder[T <: ThriftEnum]: Encoder[T] = Encoder[String].contramap(t => pascalCaseToHyphenated(t.name))
implicit def officeEncoder[A <: Office]: Encoder[A] = Encoder[String].contramap(o => o.name.toUpperCase)
implicit val dateTimeEncoder: Encoder[CapiDateTime] = genDateTimeEncoder()
implicit val debugEncoder: Encoder[Debug] = Encoder.instance { d =>
Json.fromJsonObject(
JsonObject(
"lastSeenByPorterAt" -> d.lastSeenByPorterAt.fold(Json.Null)(_.asJson(genDateTimeEncoder(false))),
"revisionSeenByPorter" -> d.revisionSeenByPorter.fold(Json.Null)(_.asJson),
"contentSource" -> d.contentSource.fold(Json.Null)(_.asJson),
"originatingSystem" -> d.originatingSystem.fold(Json.Null)(_.asJson)
).filter {
case (_, Json.Null) => false
case _ => true
}
)
}