Skip to content
Source
Sign inSign up

adapterDriver.ts

37 lines1.4 KB

1import { ProviderDriverKind, ProviderInstanceId } from "@t3tools/contracts";
2import type { ProviderDriverCreateInput } from "./driver.ts";
3export type { ProviderDriverCreateInput as ProviderAdapterDriverCreateInput } from "./driver.ts";
4import * as Schema from "effect/Schema";
5import type * as Effect from "effect/Effect";
6import type * as Scope from "effect/Scope";
7​
8import type * as ProviderAdapter from "@t3tools/provider-core/server/ProviderAdapter";
9​
10export class ProviderAdapterDriverCreateError extends Schema.TaggedError<ProviderAdapterDriverCreateError>()(
11 "ProviderAdapterDriverCreateError",
12 {
13 driver: ProviderDriverKind,
14 instanceId: ProviderInstanceId,
15 detail: Schema.String,
16 cause: Schema.optional(Schema.Defect()),
17 },
18) {
19 override get message(): string {
20 return `Failed to create orchestration-v2 provider adapter ${this.instanceId} (${this.driver}): ${this.detail}`;
21 }
23​
24export interface ProviderAdapterDriver<Config, R = never> {
25 readonly driverKind: ProviderDriverKind;
26 readonly configSchema: Schema.Codec<Config, unknown>;
27 readonly defaultConfig: () => Config;
28 readonly create: (
29 input: ProviderDriverCreateInput<Config>,
30 ) => Effect.Effect<
31 ProviderAdapter.ProviderAdapterV2["Service"],
32 ProviderAdapterDriverCreateError,
33 R | Scope.Scope
34 >;
36​
37export type AnyProviderAdapterDriver<R = never> = ProviderAdapterDriver<any, R>;