const layer = EmailService.EmailServiceLive;
const runtimeEffect = Effect.gen(function* (_) {
const scope = yield* _(
Scope.make(ExecutionStrategy.parallel).pipe(
Effect.tap((scope) =>
Scope.addFinalizer(scope, Console.log("finalizer 1"))
),
Effect.tap((scope) =>
Scope.addFinalizer(scope, Console.log("finalizer 2"))
)
)
);
const runtime = yield* _(Layer.toRuntime(layer), Scope.extend(scope));
yield* _(Scope.close(scope, Exit.unit));
return runtime;
});
export async function runPromise<E, A>(
effect: Effect.Effect<Layer.Layer.Success<typeof layer>, E, A>
): Promise<A> {
const runtime = await Effect.runPromise(runtimeEffect);
return Runtime.runPromise(runtime)(effect);
}
const layer = EmailService.EmailServiceLive;
const runtimeEffect = Effect.gen(function* (_) {
const scope = yield* _(
Scope.make(ExecutionStrategy.parallel).pipe(
Effect.tap((scope) =>
Scope.addFinalizer(scope, Console.log("finalizer 1"))
),
Effect.tap((scope) =>
Scope.addFinalizer(scope, Console.log("finalizer 2"))
)
)
);
const runtime = yield* _(Layer.toRuntime(layer), Scope.extend(scope));
yield* _(Scope.close(scope, Exit.unit));
return runtime;
});
export async function runPromise<E, A>(
effect: Effect.Effect<Layer.Layer.Success<typeof layer>, E, A>
): Promise<A> {
const runtime = await Effect.runPromise(runtimeEffect);
return Runtime.runPromise(runtime)(effect);
}