import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { Credentials } from "@distilled.cloud/aws/Credentials";
import { Region } from "@distilled.cloud/aws/Region";
import { HttpClient } from "effect/unstable/http/HttpClient";
export const withContext = Effect.fn(function* <
Input,
A,
Err = never,
Req = never,
>(fn: (request: Input) => Effect.Effect) {
const ctx = yield* context();
return (
request: Input,
): Effect.Effect> =>
fn(request).pipe(Effect.provide(ctx));
});
export const context = Effect.fn(function* () {
const credentials = yield* Credentials;
const region = yield* Region;
const httpClient = yield* HttpClient;
return Layer.mergeAll(
Layer.succeed(Credentials, credentials),
Layer.succeed(Region, region),
Layer.succeed(HttpClient, httpClient),
);
});