ソースを参照

http4s: Bump versions, use circe JSON library

http4s: 0.10.1 -> 0.11.3
argonaut -> circe 0.3.0
doobie: 0.2.3-RC2 -> 0.2.3
twirl: 1.0.4 -> 1.1.1
hikari: 2.2.5 -> 2.4.1
Gary Coady 9 年 前
コミット
2d19f609ed

+ 10 - 13
frameworks/Scala/http4s/build.sbt

@@ -10,27 +10,24 @@ TwirlKeys.templateImports += "http4s.techempower.benchmark._"
 
 com.github.retronym.SbtOneJar.oneJarSettings
 
-val http4sVersion = "0.10.1"
-val doobieVersion = "0.2.3-RC2"
-val scalazVersion = "7.1.3"
+val http4sVersion = "0.11.3"
+val circeVersion = "0.3.0"
+val doobieVersion = "0.2.3"
 
 libraryDependencies ++= Seq(
 	"org.http4s" %% "http4s-blaze-server" % http4sVersion,
 	"org.http4s" %% "http4s-dsl" % http4sVersion,
-	"org.http4s" %% "http4s-argonaut" % http4sVersion,
+	"org.http4s" %% "http4s-circe" % http4sVersion,
 	"org.http4s" %% "http4s-twirl" % http4sVersion,
+	"io.circe" %% "circe-core" % circeVersion,
+	"io.circe" %% "circe-generic" % circeVersion,
+	"io.circe" %% "circe-parser" % circeVersion,
 	"org.tpolecat" %% "doobie-core" % doobieVersion,
-	"org.tpolecat" %% "doobie-contrib-hikari" % doobieVersion,
+	"org.tpolecat" %% "doobie-contrib-hikari" % doobieVersion exclude("com.zaxxer", "HikariCP-java6"),
 	"com.zaxxer" %  "HikariCP" % "2.4.1",
-	"org.scalaz" %% "scalaz-core" % scalazVersion,
-	"org.scalaz" %% "scalaz-concurrent" % scalazVersion,
-	"com.github.alexarchambault" %% "argonaut-shapeless_6.1" % "0.3.1",
-	"org.postgresql" % "postgresql" % "9.4.1208"
+	"org.postgresql" % "postgresql" % "9.4.1208",
+	"org.slf4j" % "slf4j-nop" % "1.7.18"
 )
 
 mainClass in oneJar := Some("http4s.techempower.benchmark.WebServer")
 
-resolvers ++= Seq(
-  "Scalaz Bintray Repo" at "http://dl.bintray.com/scalaz/releases",
-  "tpolecat" at "http://dl.bintray.com/tpolecat/maven"
-)

+ 1 - 1
frameworks/Scala/http4s/project/plugins.sbt

@@ -1,3 +1,3 @@
 addSbtPlugin("org.scala-sbt.plugins" % "sbt-onejar" % "0.8")
 
-addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.0.4")
+addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.1.1")

+ 12 - 9
frameworks/Scala/http4s/src/main/scala/WebServer.scala

@@ -1,18 +1,20 @@
 package http4s.techempower.benchmark
 
 import org.http4s._
-import org.http4s.server._
+import org.http4s.circe._
 import org.http4s.dsl._
-import org.http4s.argonaut._
+import org.http4s.server._
 import org.http4s.server.blaze.BlazeBuilder
 import org.http4s.twirl._
 import headers._
 
-import _root_.argonaut._, Argonaut._, Shapeless._
-
 import doobie.contrib.hikari.hikaritransactor._
 import doobie.imports._
 
+import io.circe._
+import io.circe.generic.auto._
+import io.circe.syntax._
+
 import scalaz._
 import scalaz.concurrent.{Task, TaskApp}
 import scalaz.std.list._
@@ -29,7 +31,6 @@ object Middleware {
     Service.lift { req: Request =>
       service.map { resp =>
         resp.putHeaders(
-          headers.Date(DateTime.now),
           Header("Server", req.serverAddr)
         )
       }.apply(req)
@@ -54,6 +55,8 @@ object Queries extends OptionalValidatingQueryParamDecoderMatcher[Int]("queries"
 }
 
 object WebServer extends TaskApp {
+  implicit def jsonEncoder[A](implicit encoder: Encoder[A]) = jsonEncoderOf[A](encoder)
+
   def xaTask(host: String) =
     HikariTransactor[Task]("org.postgresql.Driver", s"jdbc:postgresql://$host/hello_world", "benchmarkdbuser", "benchmarkdbpass")
 
@@ -112,14 +115,14 @@ object WebServer extends TaskApp {
   // HTTP service definition
   def service(xa: Transactor[Task]) = HttpService {
     case GET -> Root / "json" =>
-      Ok(Json("message" -> jString("Hello, World!")))
+      Ok(Json.obj("message" -> Json.string("Hello, World!")))
 
     case GET -> Root / "db" =>
-      Ok(selectRandomWorld(xa).map(_.asJson))
+      Ok(selectRandomWorld(xa))
 
     case GET -> Root / "queries" :? Queries(rawQueries) =>
       val numQueries = Queries.clampQueries(rawQueries)
-      Ok(getWorlds(xa, numQueries).map(_.asJson))
+      Ok(getWorlds(xa, numQueries))
 
     case GET -> Root / "fortunes" =>
       val page = for {
@@ -138,7 +141,7 @@ object WebServer extends TaskApp {
         _ <- updateWorlds(xa, newWorlds)
       } yield newWorlds
 
-      Ok(updated.map(_.asJson))
+      Ok(updated)
 
     case GET -> Root / "plaintext" =>
       Ok("Hello, World!")