diff --git a/.travis.yml b/.travis.yml index 45bb3db..a392ac9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ language: scala scala: - 2.11.7 +jdk: + - oraclejdk8 branches: only: - master diff --git a/build.sbt b/build.sbt index e495755..dd66487 100644 --- a/build.sbt +++ b/build.sbt @@ -12,7 +12,7 @@ scalaVersion := "2.11.8" scalacOptions ++= Seq("-feature", "-unchecked", "-deprecation") -crossScalaVersions := Seq("2.11.8", "2.10.6") +crossScalaVersions := Seq("2.11.8") resolvers ++= Seq( "spray" at "http://repo.spray.io/", @@ -24,6 +24,7 @@ libraryDependencies ++= Seq( "io.spray" %% "spray-httpx" % "1.3.3" % "provided", "com.typesafe.akka" %% "akka-actor" % "2.3.6" % "provided", "com.typesafe.play" %% "play-json" % "2.3.8" % "provided", + "com.typesafe.akka" %% "akka-http-spray-json-experimental" % "2.4.4" % "provided", "org.scalatest" %% "scalatest" % "2.2.4" % "test" ) diff --git a/src/main/scala/org/zalando/jsonapi/json/sprayjson/AkkaHttpJsonapiSupport.scala b/src/main/scala/org/zalando/jsonapi/json/sprayjson/AkkaHttpJsonapiSupport.scala new file mode 100644 index 0000000..e368320 --- /dev/null +++ b/src/main/scala/org/zalando/jsonapi/json/sprayjson/AkkaHttpJsonapiSupport.scala @@ -0,0 +1,19 @@ +package org.zalando.jsonapi.json +package sprayjson + +import akka.http.scaladsl.marshalling.{ Marshaller, ToEntityMarshaller } +import org.zalando.jsonapi.model.RootObject +import spray.json._ +import akka.http.scaladsl.model.MediaTypes.`application/vnd.api+json` +import akka.http.scaladsl.unmarshalling.{ FromEntityUnmarshaller, Unmarshaller } +import org.zalando.jsonapi._ + +trait AkkaHttpJsonapiSupport extends DefaultJsonProtocol with SprayJsonJsonapiFormat { + implicit def akkaHttpJsonJsonapiMarshaller[T: JsonapiRootObjectWriter]: ToEntityMarshaller[T] = + Marshaller.withFixedContentType(`application/vnd.api+json`)(_.rootObject.toJson.compactPrint) + + implicit def akkaHttpJsonJsonapiUnmarshaller[T: JsonapiRootObjectReader]: FromEntityUnmarshaller[T] = + Unmarshaller.stringUnmarshaller.forContentTypes(`application/vnd.api+json`).map(_.parseJson.convertTo[RootObject].jsonapi[T]) +} + +object AkkaHttpJsonapiSupport extends AkkaHttpJsonapiSupport