import { reportError } from "@effect-app/infra/errorReporter" import { Cause, Effect, Exit } from "effect-app" const reportQueueError_ = reportError("Queue") export const reportQueueError = (cause: Cause.Cause, extras?: Record) => reportQueueError_(cause, extras) export function reportNonInterruptedFailure(context?: Record) { const report = reportNonInterruptedFailureCause(context) return (inp: Effect.Effect): Effect.Effect, never, R> => inp.pipe( Effect.onExit( Exit.match({ onFailure: report, onSuccess: () => Effect.void }) ), Effect.exit ) } export function reportNonInterruptedFailureCause(context?: Record) { return (cause: Cause.Cause): Effect.Effect => { if (Cause.hasInterruptsOnly(cause)) { return Effect.failCause(cause as Cause.Cause) } return reportQueueError(cause, context) } }