34 lines · 1.0 KB · TypeScript
RawDownload
import { Cause, Exit, Result, Schema, SchemaIssue } from "effect"; export const decodeJsonResult = <S extends Schema.Codec<unknown, unknown, never, never>>(  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 = <S extends Schema.Codec<unknown, unknown, never, never>>(  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<Schema.SchemaError>) => {  const squashed = Cause.squash(cause);  return Schema.isSchemaError(squashed)    ? SchemaIssue.makeFormatterDefault()(squashed.issue)    : Cause.pretty(cause);};