1616
1717package feral .lambda
1818
19+ import scala .concurrent .Await
20+ import scala .concurrent .duration .Duration
21+
1922import cats .data .OptionT
2023import cats .effect .IO
2124import cats .effect .kernel .Resource
@@ -34,29 +37,33 @@ private[lambda] abstract class IOLambdaPlatform[Event, Result]
3437 final def handleRequest (
3538 input : InputStream ,
3639 output : OutputStream ,
37- context : lambdaRuntime.Context ): Unit =
38- Resource
39- .eval {
40- for {
41- lambda <- setupMemo
42- event <- fs2
43- .io
44- .readInputStream(IO .pure(input), 8192 , closeAfterUse = false )
45- .through(circe.fs2.byteStreamParser)
46- .through(circe.fs2.decoder[IO , Event ])
47- .head
48- .compile
49- .lastOrError
50- context <- IO (Context .fromJava[IO ](context))
51- _ <- OptionT (lambda(event, context)).foreachF { result =>
52- Resource .fromAutoCloseable(IO (new OutputStreamWriter (output))).use { writer =>
53- IO .blocking(Printer .noSpaces.unsafePrintToAppendable(result.asJson, writer))
40+ context : lambdaRuntime.Context ): Unit = {
41+ val (dispatcher, lambda) =
42+ Await .result(setupMemo, Duration .Inf )
43+
44+ dispatcher.unsafeRunSync {
45+ Resource
46+ .eval {
47+ for {
48+ event <- fs2
49+ .io
50+ .readInputStream(IO .pure(input), 8192 , closeAfterUse = false )
51+ .through(circe.fs2.byteStreamParser)
52+ .through(circe.fs2.decoder[IO , Event ])
53+ .head
54+ .compile
55+ .lastOrError
56+ context <- IO (Context .fromJava[IO ](context))
57+ _ <- OptionT (lambda(event, context)).foreachF { result =>
58+ Resource .fromAutoCloseable(IO (new OutputStreamWriter (output))).use { writer =>
59+ IO .blocking(Printer .noSpaces.unsafePrintToAppendable(result.asJson, writer))
60+ }
5461 }
55- }
56- } yield ()
57- }
58- .onFinalize( IO .blocking(input.close()) &> IO .blocking(output.close()))
59- .use_
60- .unsafeRunSync()(runtime)
62+ } yield ()
63+ }
64+ .onFinalize( IO .blocking(input.close()) &> IO .blocking(output.close()))
65+ .use_
66+ }
67+ }
6168
6269}
0 commit comments