1import type * as deadline from "@distilled.cloud/aws/deadline";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Queue } from "./Queue.ts";
5
6/**
7 * Runtime binding for `deadline:UpdateTask`.
8 *
9 * Retargets a single task of a job in the bound {@link Queue} — requeue
10 * (`READY`), cancel (`CANCELED`), suspend (`SUSPENDED`), or force-fail/
11 * succeed it. The queue's `farmId`/`queueId` are injected from the binding.
12 * Provide the implementation with `Effect.provide(AWS.Deadline.UpdateTaskHttp)`.
13 * ### Managing Tasks
14 * **Example:** Cancel A Task
15 * ```typescript
16 * // init — bind the operation to the queue
17 * const updateTask = yield* AWS.Deadline.UpdateTask(queue);
18 *
19 * // runtime
20 * yield* updateTask({ jobId, stepId, taskId, targetRunStatus: "CANCELED" });
21 * ```
22 *
23 * @binding
24 */
25export interface UpdateTask extends Binding.Service<
26 UpdateTask,
27 "AWS.Deadline.UpdateTask",
28 (
29 queue: Queue,
30 ) => Effect.Effect<
31 (
32 request: Omit<deadline.UpdateTaskRequest, "farmId" | "queueId">,
33 ) => Effect.Effect<deadline.UpdateTaskResponse, deadline.UpdateTaskError>
34 >
35> {}
36export const UpdateTask = Binding.Service<UpdateTask>(
37 "AWS.Deadline.UpdateTask",
38);