type Result<Handler, DeclaredErrors, Returns> = Handler extends (
request: any,
) => Effect.Effect<any, infer ActualErrors, any>
? [DeclaredErrors] extends [ActualErrors] // <-- the actual check
? Returns
: never
: never;
export const handleExact =
<
E,
Provides,
R,
Endpoints extends HttpApiEndpoint.Any,
Name extends HttpApiEndpoint.Name<Endpoints>,
R1,
Handler extends HttpApiEndpoint.HandlerWithName<Endpoints, Name, E, R1>,
>(
name: Name,
handler: Handler,
) =>
(
handlers: HttpApiBuilder.Handlers<E, Provides, R, Endpoints>,
): Result<
Handler,
H.HttpApiEndpoint.Error<H.HttpApiEndpoint.WithName<Endpoints, Name>>,
ReturnType<typeof handlers.handle<Name, R1>>
> => {
// @ts-ignore
return handlers.handle(name, handler);
};
type Result<Handler, DeclaredErrors, Returns> = Handler extends (
request: any,
) => Effect.Effect<any, infer ActualErrors, any>
? [DeclaredErrors] extends [ActualErrors] // <-- the actual check
? Returns
: never
: never;
export const handleExact =
<
E,
Provides,
R,
Endpoints extends HttpApiEndpoint.Any,
Name extends HttpApiEndpoint.Name<Endpoints>,
R1,
Handler extends HttpApiEndpoint.HandlerWithName<Endpoints, Name, E, R1>,
>(
name: Name,
handler: Handler,
) =>
(
handlers: HttpApiBuilder.Handlers<E, Provides, R, Endpoints>,
): Result<
Handler,
H.HttpApiEndpoint.Error<H.HttpApiEndpoint.WithName<Endpoints, Name>>,
ReturnType<typeof handlers.handle<Name, R1>>
> => {
// @ts-ignore
return handlers.handle(name, handler);
};