import { Effect, Schema, Cause } from "effect";
class DatabaseError extends Schema.TaggedError<DatabaseError>()("DatabaseError", {
message: Schema.String,
query: Schema.String,
originalError: Schema.Defect,
}) {}
const failingDbQuery = () => {
const err = new Error("Connection refused to postgres:5432");
(err as any).code = "ECONNREFUSED";
throw err;
};
const queryDatabase = Effect.fn("queryDatabase")(function* (query: string) {
yield* Effect.tryPromise({
try: async () => failingDbQuery(),
catch: (error) =>
new DatabaseError({
message: "Database query failed",
query,
originalError: error,
}),
});
});
await Effect.runPromise(
queryDatabase("my query").pipe(
Effect.catchAllCause((cause) => Effect.sync(() => console.log(Cause.pretty(cause)))),
),
);
import { Effect, Schema, Cause } from "effect";
class DatabaseError extends Schema.TaggedError<DatabaseError>()("DatabaseError", {
message: Schema.String,
query: Schema.String,
originalError: Schema.Defect,
}) {}
const failingDbQuery = () => {
const err = new Error("Connection refused to postgres:5432");
(err as any).code = "ECONNREFUSED";
throw err;
};
const queryDatabase = Effect.fn("queryDatabase")(function* (query: string) {
yield* Effect.tryPromise({
try: async () => failingDbQuery(),
catch: (error) =>
new DatabaseError({
message: "Database query failed",
query,
originalError: error,
}),
});
});
await Effect.runPromise(
queryDatabase("my query").pipe(
Effect.catchAllCause((cause) => Effect.sync(() => console.log(Cause.pretty(cause)))),
),
);