94 lines
3 KiB
TypeScript
94 lines
3 KiB
TypeScript
// This file is auto-generated by oagen. Do not edit.
|
|
|
|
import { Effect } from "effect"
|
|
import type { Client, Options, TDataShape } from "./client/index.js"
|
|
import type { ServerSentEventsResult } from "./core/serverSentEvents.gen.js"
|
|
import type {
|
|
CreateProjectTaskData,
|
|
CreateProjectTaskError,
|
|
CreateProjectTaskErrors,
|
|
CreateProjectTaskResponse,
|
|
CreateProjectTaskResponses,
|
|
ListProjectTasksData,
|
|
ListProjectTasksError,
|
|
ListProjectTasksErrors,
|
|
ListProjectTasksResponse,
|
|
ListProjectTasksResponses,
|
|
StreamProjectEventsData,
|
|
StreamProjectEventsResponse,
|
|
StreamProjectEventsResponses,
|
|
} from "./types.gen.js"
|
|
|
|
export type ExampleEffectOptions<TData extends TDataShape, TResponse> = Omit<
|
|
Options<TData, true, TResponse, "data">,
|
|
"responseStyle" | "throwOnError"
|
|
>
|
|
|
|
export interface ExampleEffectClient {
|
|
tasks: {
|
|
/**
|
|
* List tasks for a project.
|
|
*/
|
|
listProjectTasks(
|
|
options: ExampleEffectOptions<ListProjectTasksData, ListProjectTasksResponses>,
|
|
): Effect.Effect<ListProjectTasksResponse, ListProjectTasksError | Error>
|
|
/**
|
|
* Create a task in a project.
|
|
*/
|
|
createProjectTask(
|
|
options: ExampleEffectOptions<CreateProjectTaskData, CreateProjectTaskResponses>,
|
|
): Effect.Effect<CreateProjectTaskResponse, CreateProjectTaskError | Error>
|
|
}
|
|
events: {
|
|
/**
|
|
* Stream project events as server-sent events.
|
|
*/
|
|
streamProjectEvents(
|
|
options: ExampleEffectOptions<StreamProjectEventsData, StreamProjectEventsResponses>,
|
|
): Effect.Effect<ServerSentEventsResult<StreamProjectEventsResponses>, Error>
|
|
}
|
|
}
|
|
|
|
export function createExampleEffectClient(client: Client): ExampleEffectClient {
|
|
return {
|
|
tasks: {
|
|
listProjectTasks: (options) =>
|
|
request<ListProjectTasksResponse, ListProjectTasksError>(() =>
|
|
client.get<ListProjectTasksResponses, ListProjectTasksErrors, true, "data">({
|
|
url: "/projects/{projectId}/tasks",
|
|
...options,
|
|
throwOnError: true,
|
|
responseStyle: "data",
|
|
}),
|
|
),
|
|
createProjectTask: (options) =>
|
|
request<CreateProjectTaskResponse, CreateProjectTaskError>(() =>
|
|
client.post<CreateProjectTaskResponses, CreateProjectTaskErrors, true, "data">({
|
|
url: "/projects/{projectId}/tasks",
|
|
...options,
|
|
throwOnError: true,
|
|
responseStyle: "data",
|
|
headers: { "Content-Type": "application/json", ...options?.headers },
|
|
}),
|
|
),
|
|
},
|
|
events: {
|
|
streamProjectEvents: (options) =>
|
|
request<ServerSentEventsResult<StreamProjectEventsResponses>, never>(() =>
|
|
client.sse.get<StreamProjectEventsResponses, unknown, true, "data">({
|
|
url: "/projects/{projectId}/events",
|
|
...options,
|
|
throwOnError: true,
|
|
responseStyle: "data",
|
|
}),
|
|
),
|
|
},
|
|
}
|
|
}
|
|
|
|
function request<T, E>(evaluate: () => Promise<T>) {
|
|
return Effect.tryPromise({
|
|
try: evaluate,
|
|
catch: (error) => error as E | Error,
|
|
})
|
|
}
|