import { Cause, Exit, Result, Schema, SchemaIssue } from "effect"; export const decodeJsonResult = >( schema: S, ) => { const decode = Schema.decodeExit(Schema.fromJsonString(schema)); return (input: string) => { const result = decode(input); if (Exit.isFailure(result)) { return Result.fail(result.cause); } return Result.succeed(result.value); }; }; export const decodeUnknownJsonResult = >( schema: S, ) => { const decode = Schema.decodeUnknownExit(Schema.fromJsonString(schema)); return (input: unknown) => { const result = decode(input); if (Exit.isFailure(result)) { return Result.fail(result.cause); } return Result.succeed(result.value); }; }; export const formatSchemaError = (cause: Cause.Cause) => { const squashed = Cause.squash(cause); return Schema.isSchemaError(squashed) ? SchemaIssue.makeFormatterDefault()(squashed.issue) : Cause.pretty(cause); };