app/models/APIResponse.scala (20 lines of code) (raw):
package models
import io.circe._
import io.circe.generic.semiauto._
import io.circe.syntax._
import play.api.Logging
import play.api.mvc._
case class AtomWorkshopAPIResponse(message: String)
object AtomWorkshopAPIResponse{
implicit val atomWorkshopApiResponseEncoder: Encoder[AtomWorkshopAPIResponse] = deriveEncoder[AtomWorkshopAPIResponse]
}
object APIResponse extends Results with Logging {
def apiErrorToResult(e: AtomAPIError) = {
logger.error(e.msg)
e.status(AtomWorkshopAPIResponse(e.msg).asJson.noSpaces)
}
def apply[T](result: Either[AtomAPIError, T])(implicit encoder: Encoder[T]): Result = {
val res = result.fold(apiErrorToResult, r => Ok(r.asJson.noSpaces))
res.as("text/json")
}
}