From a7a8e18c94df06bad8ce554e0ac9db8c8a753714 Mon Sep 17 00:00:00 2001 From: Adam Fraser Date: Sat, 12 Nov 2022 08:32:54 -0800 Subject: [PATCH] propagate defects --- .../shared/src/test/scala/zio/stream/ZStreamSpec.scala | 8 ++++++++ streams/shared/src/main/scala/zio/stream/ZStream.scala | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala b/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala index 4d27fb889f3c..6e12ede52de7 100644 --- a/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala +++ b/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala @@ -3932,6 +3932,14 @@ object ZStreamSpec extends ZIOBaseSpec { ) }) ), + suite("toQueueOfElements")( + test("propagates defects") { + for { + queue <- ZStream.dieMessage("die").toQueueOfElements(1) + exit <- queue.take + } yield assert(exit)(dies(hasMessage(equalTo("die")))) + } + ), suite("toReader")( test("read one-by-one") { check(tinyListOf(Gen.chunkOf(Gen.char))) { chunks => diff --git a/streams/shared/src/main/scala/zio/stream/ZStream.scala b/streams/shared/src/main/scala/zio/stream/ZStream.scala index a3ee2fa3b9cf..a439388ce12a 100644 --- a/streams/shared/src/main/scala/zio/stream/ZStream.scala +++ b/streams/shared/src/main/scala/zio/stream/ZStream.scala @@ -2756,13 +2756,13 @@ final class ZStream[-R, +E, +A] private (val channel: ZChannel[R, Any, Any, Any, queue: => Enqueue[Exit[Option[E], A]] )(implicit trace: Trace): ZIO[R with Scope, Nothing, Unit] = { lazy val writer: ZChannel[R, E, Chunk[A], Any, Nothing, Exit[Option[E], A], Any] = - ZChannel.readWith[R, E, Chunk[A], Any, Nothing, Exit[Option[E], A], Any]( + ZChannel.readWithCause[R, E, Chunk[A], Any, Nothing, Exit[Option[E], A], Any]( in => in.foldLeft[ZChannel[R, Any, Any, Any, Nothing, Exit[Option[E], A], Any]](ZChannel.unit) { case (channel, a) => channel *> ZChannel.write(Exit.succeed(a)) } *> writer, - err => ZChannel.write(Exit.fail(Some(err))), + err => ZChannel.write(Exit.failCause(err.map(Some(_)))), _ => ZChannel.write(Exit.fail(None)) )