opencode/packages/sdk/js/example/effect-sdk/gen/effect.gen.ts
2026-06-03 14:34:44 +00:00

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,
})
}