diff --git a/.changeset/plenty-radios-crash.md b/.changeset/plenty-radios-crash.md new file mode 100644 index 0000000000..b45cc9f55a --- /dev/null +++ b/.changeset/plenty-radios-crash.md @@ -0,0 +1,5 @@ +--- +"effect": patch +--- + +add Request.failCause diff --git a/docs/modules/Request.ts.md b/docs/modules/Request.ts.md index 63c05b1488..86b4b00cb0 100644 --- a/docs/modules/Request.ts.md +++ b/docs/modules/Request.ts.md @@ -34,6 +34,7 @@ Added in v2.0.0 - [complete](#complete) - [completeEffect](#completeeffect) - [fail](#fail) + - [failCause](#failcause) - [interruptWhenPossible](#interruptwhenpossible) - [succeed](#succeed) - [symbols](#symbols) @@ -352,6 +353,21 @@ export declare const fail: { Added in v2.0.0 +## failCause + +Complete a `Request` with the specified cause. + +**Signature** + +```ts +export declare const failCause: { + >(cause: Cause>): (self: A) => Effect.Effect + >(self: A, cause: Cause>): Effect.Effect +} +``` + +Added in v2.0.0 + ## interruptWhenPossible Interrupts the child effect when requests are no longer needed diff --git a/src/Request.ts b/src/Request.ts index a5ba7adf6f..0c21ae3821 100644 --- a/src/Request.ts +++ b/src/Request.ts @@ -2,6 +2,7 @@ * @since 2.0.0 */ import type * as _Cache from "./Cache.js" +import type { Cause } from "./Cause.js" import type * as Data from "./Data.js" import type { Deferred } from "./Deferred.js" import type { DurationInput } from "./Duration.js" @@ -216,6 +217,17 @@ export const fail: { >(self: A, error: Request.Error): Effect.Effect } = internal.fail +/** + * Complete a `Request` with the specified cause. + * + * @since 2.0.0 + * @category request completion + */ +export const failCause: { + >(cause: Cause>): (self: A) => Effect.Effect + >(self: A, cause: Cause>): Effect.Effect +} = internal.failCause + /** * Complete a `Request` with the specified value. * diff --git a/src/internal/request.ts b/src/internal/request.ts index 0bb75f2a73..120bf8044c 100644 --- a/src/internal/request.ts +++ b/src/internal/request.ts @@ -1,3 +1,4 @@ +import type * as Cause from "../Cause.js" import type * as Effect from "../Effect.js" import { dual } from "../Function.js" import { hasProperty } from "../Predicate.js" @@ -120,6 +121,17 @@ export const fail = dual< ) => Effect.Effect >(2, (self, error) => complete(self, core.exitFail(error) as any)) +/** @internal */ +export const failCause = dual< + >( + cause: Cause.Cause> + ) => (self: A) => Effect.Effect, + >( + self: A, + cause: Cause.Cause> + ) => Effect.Effect +>(2, (self, cause) => complete(self, core.exitFailCause(cause) as any)) + /** @internal */ export const succeed = dual< >(