This commit is contained in:
@@ -1,15 +1,13 @@
|
||||
import { type Cause, Context, Effect, Layer, type Queue, type Scope } from "effect"
|
||||
import { type Cause, Context, type Effect, Layer, type Queue, type Scope } from "effect"
|
||||
|
||||
|
||||
export interface ErrorObserver<EIn, EOut> {
|
||||
readonly "~In": EIn
|
||||
readonly "~Out": EOut
|
||||
readonly "~Caught": Exclude<EIn, EOut>
|
||||
|
||||
handle<A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, Exclude<E, Exclude<EIn, EOut>>, R>
|
||||
readonly subscribe: Effect.Effect<Queue.Dequeue<Cause.Cause<EIn>>, never, Scope.Scope>
|
||||
export interface ErrorObserver<E = never> {
|
||||
handle<Eff extends Effect.Effect<any, any, any>>(effect: Eff): Eff
|
||||
readonly subscribe: Effect.Effect<Queue.Dequeue<Cause.Cause<E>>, never, Scope.Scope>
|
||||
}
|
||||
|
||||
export const ErrorObserver = <E = never>(): Context.Tag<ErrorObserver<E>, ErrorObserver<E>> => Context.GenericTag("@effect-fc/ErrorObserver/ErrorObserver")
|
||||
|
||||
|
||||
export namespace make {
|
||||
export type Handler<EIn, EOut> = (
|
||||
@@ -24,34 +22,3 @@ export namespace make {
|
||||
export const make = <EIn = never>() => <EOut>(
|
||||
f: make.Handler<NoInfer<EIn>, EOut>
|
||||
): Effect.Effect<ErrorObserver<EIn, EOut>> =>
|
||||
|
||||
|
||||
export const ErrorObserver: Context.Tag<
|
||||
ErrorObserver<unknown, unknown>,
|
||||
ErrorObserver<unknown, unknown>
|
||||
> = Context.GenericTag("@effect-fc/ErrorObserver/ErrorObserver")
|
||||
|
||||
export namespace Service {
|
||||
export interface Result<Self, Id extends string, EIn, EOut>
|
||||
extends Context.TagClass<Self, Id, ErrorObserver<EIn, EOut>> {
|
||||
readonly Default: Layer.Layer<Self>
|
||||
}
|
||||
}
|
||||
|
||||
export const Service = <Self, EIn>() => (
|
||||
<const Id extends string, EOut>(
|
||||
id: Id,
|
||||
f: (
|
||||
self: Effect.Effect<never, NoInfer<EIn>>,
|
||||
actions: {
|
||||
failure(failure: NoInfer<EIn>): Effect.Effect<never>
|
||||
defect(defect: unknown): Effect.Effect<never>
|
||||
},
|
||||
) => Effect.Effect<EOut>,
|
||||
): Service.Result<Self, Id, EIn, EOut> => Layer.effect(
|
||||
ErrorObserver as Context.Tag<ErrorObserver<EIn, EOut>, ErrorObserver<EIn, EOut>>,
|
||||
Effect.gen(function*() {
|
||||
|
||||
},
|
||||
))
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user