import type { Effect } from "../Effect.js" import type { Concurrency } from "../Types.js" import * as core from "./core.js" /** @internal */ export const match = ( concurrency: Concurrency | undefined, sequential: () => Effect, unbounded: () => Effect, bounded: (limit: number) => Effect ): Effect => { switch (concurrency) { case undefined: return sequential() case "unbounded": return unbounded() case "inherit": return core.fiberRefGetWith( core.currentConcurrency, (concurrency) => concurrency === "unbounded" ? unbounded() : concurrency > 1 ? bounded(concurrency) : sequential() ) default: return concurrency > 1 ? bounded(concurrency) : sequential() } } /** @internal */ export const matchSimple = ( concurrency: Concurrency | undefined, sequential: () => Effect, concurrent: () => Effect ): Effect => { switch (concurrency) { case undefined: return sequential() case "unbounded": return concurrent() case "inherit": return core.fiberRefGetWith( core.currentConcurrency, (concurrency) => concurrency === "unbounded" || concurrency > 1 ? concurrent() : sequential() ) default: return concurrency > 1 ? concurrent() : sequential() } }