From b9e77a7059d2c730e976866773210ed78dce5d6c Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sun, 25 Feb 2024 23:53:48 +0000 Subject: [PATCH 1/9] Update kind-projector to 0.13.3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 5d9f8b3e..c5de0a68 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -16,7 +16,7 @@ object Dependencies { val dropwizard = "4.2.25" val collectionCompat = "2.11.0" - val kindProjector = "0.13.2" + val kindProjector = "0.13.3" val scalaTest = "3.2.18" val scalaCheck = "1.17.0" From 9c2d3277f4ead82896b3c55483d99e6b72d1b181 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Wed, 6 Mar 2024 21:40:36 +0000 Subject: [PATCH 2/9] Update cats-effect to 3.5.4 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 5d9f8b3e..eda4cb7d 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -4,7 +4,7 @@ object Dependencies { object Version { val cats = "2.10.0" - val catsEffect = "3.5.3" + val catsEffect = "3.5.4" val fs2 = "3.9.4" val circe = "0.14.6" val amqpClient = "5.20.0" From 90f5ff119e3a4b611b7b84a193347cf4d2c65ac6 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 30 Mar 2024 21:41:37 +0000 Subject: [PATCH 3/9] Update scalafmt-core to 3.8.1 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 949e79ba..5ed27490 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = "3.8.0" +version = "3.8.1" style = default maxColumn = 120 align.preset = most From b3c5d1e6e45f55ef1b7c5ced35af34a007ab3e44 Mon Sep 17 00:00:00 2001 From: matejcerny <35267431+matejcerny@users.noreply.github.com> Date: Tue, 23 Apr 2024 19:01:51 +0200 Subject: [PATCH 4/9] Downgrade sbt-mdoc (#944) --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index d2ca5354..9bcdad9f 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,7 +4,7 @@ resolvers += "Typesafe Repository" at "https://repo.typesafe.com/typesafe/releas addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.10.0") addSbtPlugin("com.47deg" % "sbt-microsites" % "1.4.4") -addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.5.2") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.7") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.0") addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4") From 3e54a0734fec1add265904cff214282fe51e8e17 Mon Sep 17 00:00:00 2001 From: matejcerny <35267431+matejcerny@users.noreply.github.com> Date: Fri, 24 May 2024 15:34:02 +0200 Subject: [PATCH 5/9] Dynamic versioning via dynver (#953) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Matěj Černý <35267431+matejcerny@users.noreply.github.com> --- build.sbt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index d26aea0d..9003037a 100644 --- a/build.sbt +++ b/build.sbt @@ -56,7 +56,7 @@ val commonSettings = List( libraryDependencies ++= commonDependencies(scalaVersion.value), resolvers += "Apache public" at "https://repository.apache.org/content/groups/public/", scalafmtOnCompile := true, - mimaPreviousArtifacts := Set(organization.value %% moduleName.value % "5.1.0") + mimaPreviousArtifacts := previousStableVersion.value.map(organization.value %% moduleName.value % _).toSet ) def CoreDependencies(scalaVersionStr: String): List[ModuleID] = @@ -95,7 +95,8 @@ lazy val noPublish = List( publish := {}, publishLocal := {}, publishArtifact := false, - publish / skip := true + publish / skip := true, + crossScalaVersions := Nil ) lazy val `fs2-rabbit-root` = project From adf1d5ba23358d2eca11e1a547ccdd5318a4e786 Mon Sep 17 00:00:00 2001 From: matejcerny <35267431+matejcerny@users.noreply.github.com> Date: Mon, 27 May 2024 12:26:41 +0200 Subject: [PATCH 6/9] Update the copyright year (#954) --- build.sbt | 10 +++++----- .../dev/profunktor/fs2rabbit/javaConversion.scala | 2 +- .../dev/profunktor/fs2rabbit/javaConversion.scala | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.sbt b/build.sbt index 9003037a..ce97d1c7 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,7 @@ import Dependencies._ import microsites.ExtraMdFileConfig -ThisBuild / name := """fs2-rabbit""" +ThisBuild / name := "fs2-rabbit" ThisBuild / scalaVersion := "2.13.12" ThisBuild / crossScalaVersions := List("2.12.18", "2.13.12", "3.3.1") ThisBuild / versionScheme := Some("semver-spec") @@ -92,10 +92,10 @@ def TestsDependencies(scalaVersionStr: String): List[ModuleID] = ) lazy val noPublish = List( - publish := {}, - publishLocal := {}, - publishArtifact := false, - publish / skip := true, + publish := {}, + publishLocal := {}, + publishArtifact := false, + publish / skip := true, crossScalaVersions := Nil ) diff --git a/core/src/main/scala-2.12/dev/profunktor/fs2rabbit/javaConversion.scala b/core/src/main/scala-2.12/dev/profunktor/fs2rabbit/javaConversion.scala index 92565dd5..72e0e538 100644 --- a/core/src/main/scala-2.12/dev/profunktor/fs2rabbit/javaConversion.scala +++ b/core/src/main/scala-2.12/dev/profunktor/fs2rabbit/javaConversion.scala @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 ProfunKtor + * Copyright 2017-2024 ProfunKtor * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/core/src/main/scala-3/dev/profunktor/fs2rabbit/javaConversion.scala b/core/src/main/scala-3/dev/profunktor/fs2rabbit/javaConversion.scala index f872b5aa..f7ba8685 100644 --- a/core/src/main/scala-3/dev/profunktor/fs2rabbit/javaConversion.scala +++ b/core/src/main/scala-3/dev/profunktor/fs2rabbit/javaConversion.scala @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 ProfunKtor + * Copyright 2017-2024 ProfunKtor * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 8b3748e2faabc80294d9ff2bfdad229b93d2f6c9 Mon Sep 17 00:00:00 2001 From: geirolz Date: Thu, 2 May 2024 17:00:46 +0200 Subject: [PATCH 7/9] Add decoder attempt instance --- .../fs2rabbit/effects/EnvelopeDecoder.scala | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala b/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala index 97b13197..5777b706 100644 --- a/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala +++ b/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala @@ -15,13 +15,14 @@ */ package dev.profunktor.fs2rabbit.effects -import cats.{Applicative, ApplicativeThrow} +import cats.{Applicative, ApplicativeThrow, MonadError} import cats.data.Kleisli import dev.profunktor.fs2rabbit.model.{AmqpFieldValue, AmqpProperties, ExchangeName, RoutingKey} import dev.profunktor.fs2rabbit.model.AmqpFieldValue._ import cats.implicits._ -object EnvelopeDecoder { +object EnvelopeDecoder extends EnvelopeDecoderInstances { + def apply[F[_], A](implicit e: EnvelopeDecoder[F, A]): EnvelopeDecoder[F, A] = e def properties[F[_]: Applicative]: EnvelopeDecoder[F, AmqpProperties] = @@ -81,3 +82,11 @@ object EnvelopeDecoder { ): EnvelopeDecoder[F, Option[A]] = Kleisli(_.properties.headers.get(name).traverse(h => F.catchNonFatal(pf(h)))) } + +sealed trait EnvelopeDecoderInstances { + + implicit def decoderAttempt[F[_], E: MonadError[F, *], A](implicit + decoder: EnvelopeDecoder[F, A] + ): EnvelopeDecoder[F, Either[E, A]] = + decoder.attempt +} From 80a16fbc0031051474d5fce8c27d7442f65ea129 Mon Sep 17 00:00:00 2001 From: geirolz Date: Tue, 28 May 2024 09:22:14 +0200 Subject: [PATCH 8/9] Add Option decoder --- .../profunktor/fs2rabbit/effects/EnvelopeDecoder.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala b/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala index 5777b706..debd4f97 100644 --- a/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala +++ b/core/src/main/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoder.scala @@ -15,7 +15,7 @@ */ package dev.profunktor.fs2rabbit.effects -import cats.{Applicative, ApplicativeThrow, MonadError} +import cats.{Applicative, ApplicativeError, ApplicativeThrow, MonadError} import cats.data.Kleisli import dev.profunktor.fs2rabbit.model.{AmqpFieldValue, AmqpProperties, ExchangeName, RoutingKey} import dev.profunktor.fs2rabbit.model.AmqpFieldValue._ @@ -85,8 +85,13 @@ object EnvelopeDecoder extends EnvelopeDecoderInstances { sealed trait EnvelopeDecoderInstances { - implicit def decoderAttempt[F[_], E: MonadError[F, *], A](implicit + implicit def decoderAttempt[F[_], E: ApplicativeError[F, *], A](implicit decoder: EnvelopeDecoder[F, A] ): EnvelopeDecoder[F, Either[E, A]] = decoder.attempt + + implicit def decoderOption[F[_], E: ApplicativeError[F, *], A](implicit + decoder: EnvelopeDecoder[F, A] + ): EnvelopeDecoder[F, Option[A]] = + decoder.attempt.map(_.toOption) } From 920b3cbb92c4615be20cebcd7cacb63744b3b845 Mon Sep 17 00:00:00 2001 From: geirolz Date: Thu, 30 May 2024 13:13:54 +0200 Subject: [PATCH 9/9] Add tests --- .../effects/EnvelopeDecoderSpec.scala | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/core/src/test/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoderSpec.scala b/core/src/test/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoderSpec.scala index 8d5e8ee5..341b1ef8 100644 --- a/core/src/test/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoderSpec.scala +++ b/core/src/test/scala/dev/profunktor/fs2rabbit/effects/EnvelopeDecoderSpec.scala @@ -31,11 +31,14 @@ import cats.effect.unsafe.implicits.global class EnvelopeDecoderSpec extends AsyncFunSuite { + import EnvelopeDecoder._ // Available instances of EnvelopeDecoder for any ApplicativeError[F, Throwable] EnvelopeDecoder[Either[Throwable, *], String] EnvelopeDecoder[SyncIO, String] EnvelopeDecoder[EitherT[IO, String, *], String] EnvelopeDecoder[Try, String] + EnvelopeDecoder[Try, Option[String]] + EnvelopeDecoder[Try, Either[Throwable, String]] test("should decode a UTF-8 string") { val msg = "hello world!" @@ -86,4 +89,32 @@ class EnvelopeDecoderSpec extends AsyncFunSuite { .unsafeToFuture() } + test("should decode a UTF-8 string - Attempt") { + val msg = "hello world!" + val raw = msg.getBytes(StandardCharsets.UTF_8) + + EnvelopeDecoder[IO, Either[Throwable, String]] + .run( + AmqpEnvelope(DeliveryTag(0L), raw, AmqpProperties.empty, ExchangeName("test"), RoutingKey("test.route"), false) + ) + .flatMap { result => + IO(assert(result == Right(msg))) + } + .unsafeToFuture() + } + + test("should decode a UTF-8 string - Attempt option") { + val msg = "hello world!" + val raw = msg.getBytes(StandardCharsets.UTF_8) + + EnvelopeDecoder[IO, Option[String]] + .run( + AmqpEnvelope(DeliveryTag(0L), raw, AmqpProperties.empty, ExchangeName("test"), RoutingKey("test.route"), false) + ) + .flatMap { result => + IO(assert(result == Option(msg))) + } + .unsafeToFuture() + } + }