export const handlePrismaError = (error: unknown) => {
// handle prisma errors
};
// discriminate prisma error types, and recover
export const handlePrismaErrorEffect = Effect.catchTags({
PrismaClientInitializationError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientKnownRequestError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientRustPanicError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientUnknownRequestError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientValidationError: (error) => Effect.succeed({ status: 'error', error } as const),
UnknownError: (error) => Effect.succeed({ status: 'error', error } as const),
});
const fetchData = (
slug: string,
): Effect.Effect<SuccessOrError<Maybe<...>>, ReturnType<typeof handlePrismaError>> =>
Effect.tryPromise({
try: () => prisma.page.findFirst({ where: { slug } }).then((data) => ({ status: 'success', data }) as const),
catch: handlePrismaError,
}).pipe(handlePrismaErrorEffect); // I would assume this would work
export const handlePrismaError = (error: unknown) => {
// handle prisma errors
};
// discriminate prisma error types, and recover
export const handlePrismaErrorEffect = Effect.catchTags({
PrismaClientInitializationError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientKnownRequestError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientRustPanicError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientUnknownRequestError: (error) => Effect.succeed({ status: 'error', error } as const),
PrismaClientValidationError: (error) => Effect.succeed({ status: 'error', error } as const),
UnknownError: (error) => Effect.succeed({ status: 'error', error } as const),
});
const fetchData = (
slug: string,
): Effect.Effect<SuccessOrError<Maybe<...>>, ReturnType<typeof handlePrismaError>> =>
Effect.tryPromise({
try: () => prisma.page.findFirst({ where: { slug } }).then((data) => ({ status: 'success', data }) as const),
catch: handlePrismaError,
}).pipe(handlePrismaErrorEffect); // I would assume this would work