From 1b6d23ed840746db563a199681e9c864c1f15f2b Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Mon, 3 Feb 2025 12:22:35 -0500 Subject: [PATCH 1/2] Update dependencies. --- build.sbt | 2 +- project/Build.scala | 8 ++++---- project/build.properties | 2 +- project/plugins.sbt | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build.sbt b/build.sbt index 1065a8d..b120c59 100644 --- a/build.sbt +++ b/build.sbt @@ -58,7 +58,7 @@ lazy val http4s = http4sProj(projectMatrix.in(file("http4s")), "http4s")(axis => ) )) .settings(publishSettings) - .settings(scalacOptions ~= (_.filterNot(_ == "-Xfatal-warnings"))) + .settings(scalacOptions ~= (_.filterNot(_ == "-Wunused:nowarn"))) .dependsOn(core % "compile->compile;test->test") lazy val play = playProj(projectMatrix.in(file("play")), "play")(axis => _ => _.settings( diff --git a/project/Build.scala b/project/Build.scala index 7ba6649..9c4a42f 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -10,7 +10,7 @@ import sbtprojectmatrix.ProjectMatrixPlugin.autoImport._ import scala.sys.process._ object Build { - lazy val scalaVersions = Seq("2.13.15", "3.3.4") + lazy val scalaVersions = Seq("2.13.16", "3.3.5") lazy val latestScalaV = scalaVersions.find(_.startsWith("3.")).get lazy val kindProjector = compilerPlugin("org.typelevel" % "kind-projector" % "0.13.3" cross CrossVersion.full) @@ -266,8 +266,8 @@ object Build { .getOrElse(Seq()) ) - val catsCore = Def.setting("org.typelevel" %%% "cats-core" % "2.12.0") - val izumiReflect = Def.setting("dev.zio" %%% "izumi-reflect" % "2.3.10") + val catsCore = Def.setting("org.typelevel" %%% "cats-core" % "2.13.0") + val izumiReflect = Def.setting("dev.zio" %%% "izumi-reflect" % "3.0.1") val http4sV1Milestone = "1.0.0-M" object Http4sAxis extends Enumeration { @@ -312,6 +312,6 @@ object Build { def isHttp4sV1Milestone(version: String): Boolean = version.startsWith(http4sV1Milestone) - def circeDep(proj: String) = Def.setting("io.circe" %%% s"circe-$proj" % "0.14.6") + def circeDep(proj: String) = Def.setting("io.circe" %%% s"circe-$proj" % "0.14.10") def http4sDep(proj: String, version: String) = Def.setting("org.http4s" %%% s"http4s-$proj" % version) } diff --git a/project/build.properties b/project/build.properties index e88a0d8..73df629 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.10.6 +sbt.version=1.10.7 diff --git a/project/plugins.sbt b/project/plugins.sbt index 526c5f8..909993b 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,9 +1,9 @@ addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.10.1") addSbtPlugin("com.github.sbt" % "sbt-github-actions" % "0.24.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.10.0") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.5.6") -addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.6.1" ) +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.6.3" ) addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2") addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7") From 9f8374ac703abe9c1d82a7105adf565729ac243c Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Mon, 3 Feb 2025 15:50:24 -0500 Subject: [PATCH 2/2] Add `map` and `mapO` methods for extractors. --- .../routing/extractor/PathExtractor.scala | 18 ++++++++++++++++-- .../routing/extractor/QueryExtractor.scala | 9 ++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/routing/extractor/PathExtractor.scala b/core/src/main/scala/routing/extractor/PathExtractor.scala index 741967d..70b4733 100644 --- a/core/src/main/scala/routing/extractor/PathExtractor.scala +++ b/core/src/main/scala/routing/extractor/PathExtractor.scala @@ -4,12 +4,26 @@ package extractor import java.util.UUID import scala.util.Try -trait PathExtractor[A] { +trait PathExtractor[A] { self => def extract(path: String): Option[A] + + final def mapO[B](f: A => Option[B]): PathExtractor[B] = + new PathExtractor[B] { + def extract(path: String): Option[B] = self.extract(path).flatMap(f) + } + + final def map[B](f: A => B): PathExtractor[B] = mapO(a => Some(f(a))) } -trait RestOfPathExtractor[A] { +trait RestOfPathExtractor[A] { self => def extract(path: String): Option[A] + + final def mapO[B](f: A => Option[B]): RestOfPathExtractor[B] = + new RestOfPathExtractor[B] { + def extract(path: String): Option[B] = self.extract(path).flatMap(f) + } + + final def map[B](f: A => B): RestOfPathExtractor[B] = mapO(a => Some(f(a))) } object PathExtractor { diff --git a/core/src/main/scala/routing/extractor/QueryExtractor.scala b/core/src/main/scala/routing/extractor/QueryExtractor.scala index 4be1035..7404bbe 100644 --- a/core/src/main/scala/routing/extractor/QueryExtractor.scala +++ b/core/src/main/scala/routing/extractor/QueryExtractor.scala @@ -5,8 +5,15 @@ import java.util.UUID import scala.annotation.tailrec import scala.util.Try -trait QueryExtractor[A] { +trait QueryExtractor[A] { self => def extract(key: String, query: QueryMap): Option[A] + + final def mapO[B](f: A => Option[B]): QueryExtractor[B] = + new QueryExtractor[B] { + def extract(key: String, query: QueryMap): Option[B] = self.extract(key, query).flatMap(f) + } + + final def map[B](f: A => B): QueryExtractor[B] = mapO(a => Some(f(a))) } object QueryExtractor {