From ebb28a0926d65e494f2eed4e379517cf6d023788 Mon Sep 17 00:00:00 2001 From: amitsingh Date: Sat, 15 Jan 2022 18:12:04 +0530 Subject: [PATCH 1/3] Add Run Before --- .../src/main/scala/zhttp/http/Middleware.scala | 3 +++ .../test/scala/zhttp/http/MiddlewareSpec.scala | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/zio-http/src/main/scala/zhttp/http/Middleware.scala b/zio-http/src/main/scala/zhttp/http/Middleware.scala index db047d6e91..12d6a8b909 100644 --- a/zio-http/src/main/scala/zhttp/http/Middleware.scala +++ b/zio-http/src/main/scala/zhttp/http/Middleware.scala @@ -124,6 +124,9 @@ sealed trait Middleware[-R, +E, +AIn, -BIn, -AOut, +BOut] { self => final def runAfter[R1 <: R, E1 >: E](effect: ZIO[R1, E1, Any]): Middleware[R1, E1, AIn, BIn, AOut, BOut] = self.mapZIO(bOut => effect.as(bOut)) + final def runBefore[R1 <: R, E1 >: E](effect: ZIO[R1, E1, Any]): Middleware[R1, E1, AIn, BIn, AOut, BOut] = + self.contramapZIO(b => effect.as(b)) + /** * Applies Middleware based only if the condition function evaluates to true */ diff --git a/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala b/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala index b52a15441f..7a58a15505 100644 --- a/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala +++ b/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala @@ -56,10 +56,20 @@ object MiddlewareSpec extends DefaultRunnableSpec with HExitAssertion { val app = Http.identity[Int] @@ mid assertM(app(0))(equalTo(3)) } + + testM("runBefore") { + val mid = Middleware.identity.runBefore(console.putStrLn("A")) + val app = Http.fromEffect(console.putStrLn("B")) @@ mid + assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n", "B\n"))) + } + testM("runAfter") { - val mid = Middleware.succeed(1).runAfter(console.putStrLn("A")) - val app = Http.succeed(1) @@ mid - assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n"))) + val mid = Middleware.identity.runAfter(console.putStrLn("B")) + val app = Http.fromEffect(console.putStrLn("A")) @@ mid + assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n", "B\n"))) + } + + testM("runBefore and runAfter") { + val mid = Middleware.identity.runBefore(console.putStrLn("A")).runAfter(console.putStrLn("C")) + val app = Http.succeed(console.putStrLn("B")) @@ mid + assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n", "B\n", "C\n"))) } + testM("race") { val mid = Middleware.succeed('A').delay(2 second) race Middleware.succeed("B").delay(1 second) From eaa1d6133a7c6e96fa8e6349452c13c6a0cdbd69 Mon Sep 17 00:00:00 2001 From: amitsingh Date: Sat, 15 Jan 2022 18:27:38 +0530 Subject: [PATCH 2/3] Add Run Before and After --- zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala b/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala index 7a58a15505..7aa31c22c2 100644 --- a/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala +++ b/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala @@ -68,7 +68,7 @@ object MiddlewareSpec extends DefaultRunnableSpec with HExitAssertion { } + testM("runBefore and runAfter") { val mid = Middleware.identity.runBefore(console.putStrLn("A")).runAfter(console.putStrLn("C")) - val app = Http.succeed(console.putStrLn("B")) @@ mid + val app = Http.fromEffect(console.putStrLn("B")) @@ mid assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n", "B\n", "C\n"))) } + testM("race") { From cce1c05cabab7e2f7b93b827070e56a3d54ecac9 Mon Sep 17 00:00:00 2001 From: amitsingh Date: Sat, 15 Jan 2022 19:18:35 +0530 Subject: [PATCH 3/3] use renamed operator --- zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala b/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala index 7aa31c22c2..66183d7a02 100644 --- a/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala +++ b/zio-http/src/test/scala/zhttp/http/MiddlewareSpec.scala @@ -58,17 +58,17 @@ object MiddlewareSpec extends DefaultRunnableSpec with HExitAssertion { } + testM("runBefore") { val mid = Middleware.identity.runBefore(console.putStrLn("A")) - val app = Http.fromEffect(console.putStrLn("B")) @@ mid + val app = Http.fromZIO(console.putStrLn("B")) @@ mid assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n", "B\n"))) } + testM("runAfter") { val mid = Middleware.identity.runAfter(console.putStrLn("B")) - val app = Http.fromEffect(console.putStrLn("A")) @@ mid + val app = Http.fromZIO(console.putStrLn("A")) @@ mid assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n", "B\n"))) } + testM("runBefore and runAfter") { val mid = Middleware.identity.runBefore(console.putStrLn("A")).runAfter(console.putStrLn("C")) - val app = Http.fromEffect(console.putStrLn("B")) @@ mid + val app = Http.fromZIO(console.putStrLn("B")) @@ mid assertM(app(()) *> TestConsole.output)(equalTo(Vector("A\n", "B\n", "C\n"))) } + testM("race") {