import type { AnyApiSpec, HttpMethod, PathsForMethod, RequestBody, ResponseBody, } from "./api-spec.ts"; import type { OpenApiHttpRequestHandler } from "./openapi-http.ts"; /** * Base type that generic {@link OpenApiHttpRequestHandler | OpenApiHttpRequestHandlers} * can extend. */ export type AnyOpenApiHttpRequestHandler = OpenApiHttpRequestHandler< AnyApiSpec, HttpMethod >; /** * Extracts a union of all paths that can be provided to the given request handler. * * **Example** * ```typescript * const http = createOpenApiHttp(); * * type Paths = PathsFor; * ``` */ export type PathsFor = Handler extends OpenApiHttpRequestHandler ? PathsForMethod : never; /** * Extracts the request body of a specific path for the given request handler. * * **Example** * ```typescript * const http = createOpenApiHttp(); * * type RequestBody = RequestBodyFor; * ``` */ export type RequestBodyFor< Handler extends AnyOpenApiHttpRequestHandler, Path extends PathsFor, > = Handler extends OpenApiHttpRequestHandler ? RequestBody : never; /** * Extracts the response body of a specific path for the given request handler. * * **Example** * ```typescript * const http = createOpenApiHttp(); * * type ResponseBody = ResponseBodyFor; * ``` */ export type ResponseBodyFor< Handler extends AnyOpenApiHttpRequestHandler, Path extends PathsFor, > = Handler extends OpenApiHttpRequestHandler ? ResponseBody : never;