import { DEFAULT_CHUNK_SIZE } from "@effect/core/stream/Stream/definition"
/**
* Creates a stream from a `Queue` of values.
*
* @param maxChunkSize
* Maximum number of queued elements to put in one chunk in the stream.
*
* @tsplus static effect/core/stream/Stream.Ops fromQueue
*/
export function fromQueue(
queue: Dequeue,
maxChunkSize = DEFAULT_CHUNK_SIZE
): Stream {
return Stream.repeatEffectChunkMaybe(
(queue as Queue)
.takeBetween(1, maxChunkSize)
.map(Chunk.from)
.catchAllCause((cause) =>
queue.isShutdown && cause.isInterrupted ? Pull.end : Pull.failCause(cause)
)
)
}