export const GitClientLive = Layer.effect(
GitClient,
pipe(
CommandExecutor.CommandExecutor,
Effect.map((commandExecutor) =>
Layer.succeed(CommandExecutor.CommandExecutor, commandExecutor),
),
Effect.map((layer) =>
GitClient.of({
listBranches: Effect.provide(listBranches, layer),
createGitBranchFrom: provideFn2(createGitBranchFrom, layer),
createGitBranch: provideFn(createGitBranchFrom(''), layer),
switchBranch: provideFn(switchBranch, layer),
}),
),
),
);
export const provideFn =
<I, R, E, A, R2, E2, A2>(
fn: (arg: I) => Effect.Effect<R, E, A>,
layer: Layer.Layer<R2, E2, A2>,
) =>
(arg: I) =>
Effect.provide(fn(arg), layer);
export const provideFn2 =
<I, I2, R, E, A, R2, E2, A2>(
fn: (arg: I) => (arg2: I2) => Effect.Effect<R, E, A>,
layer: Layer.Layer<R2, E2, A2>,
) =>
(arg: I) =>
(arg2: I2) =>
Effect.provide(fn(arg)(arg2), layer);
export const GitClientLive = Layer.effect(
GitClient,
pipe(
CommandExecutor.CommandExecutor,
Effect.map((commandExecutor) =>
Layer.succeed(CommandExecutor.CommandExecutor, commandExecutor),
),
Effect.map((layer) =>
GitClient.of({
listBranches: Effect.provide(listBranches, layer),
createGitBranchFrom: provideFn2(createGitBranchFrom, layer),
createGitBranch: provideFn(createGitBranchFrom(''), layer),
switchBranch: provideFn(switchBranch, layer),
}),
),
),
);
export const provideFn =
<I, R, E, A, R2, E2, A2>(
fn: (arg: I) => Effect.Effect<R, E, A>,
layer: Layer.Layer<R2, E2, A2>,
) =>
(arg: I) =>
Effect.provide(fn(arg), layer);
export const provideFn2 =
<I, I2, R, E, A, R2, E2, A2>(
fn: (arg: I) => (arg2: I2) => Effect.Effect<R, E, A>,
layer: Layer.Layer<R2, E2, A2>,
) =>
(arg: I) =>
(arg2: I2) =>
Effect.provide(fn(arg)(arg2), layer);