Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.64 KB | None | 0 0
  1.   def onShutdown[T](t: => T, s: fs2.Stream[IO, T]) =
  2.     fs2.Stream.eval {
  3.       Deferred[IO, Unit] flatMap { shutdownInitiated =>
  4.         Deferred[IO, Unit] map { streamFinished =>
  5.           val sd = IO {
  6.             sys.addShutdownHook {
  7.               shutdownInitiated.complete().unsafeRunSync()
  8.               streamFinished.get.unsafeRunSync()
  9.             }
  10.           }
  11.           val poison = fs2.Stream.bracket(sd >> shutdownInitiated.get)(_ => IO.unit) >> fs2.Stream(Some(t), None)
  12.           poison.merge(s.map(t => Some(t))).unNoneTerminate onFinalize {
  13.             streamFinished.complete()
  14.           }
  15.         }
  16.       }
  17.     } flatten
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement