( success: A, failure: E )
| 9930 | * @since 4.0.0 |
| 9931 | */ |
| 9932 | export function Result<A extends Constraint, E extends Constraint>( |
| 9933 | success: A, |
| 9934 | failure: E |
| 9935 | ): Result<A, E> { |
| 9936 | const schema = declareConstructor< |
| 9937 | Result_.Result<A["Type"], E["Type"]>, |
| 9938 | Result_.Result<A["Encoded"], E["Encoded"]>, |
| 9939 | ResultIso<A, E> |
| 9940 | >()( |
| 9941 | [success, failure], |
| 9942 | ([success, failure]) => (input, ast, options) => { |
| 9943 | if (!Result_.isResult(input)) { |
| 9944 | return Effect.fail(new SchemaIssue.InvalidType(ast, input, options)) |
| 9945 | } |
| 9946 | switch (input._tag) { |
| 9947 | case "Success": |
| 9948 | return Effect.mapBothEager(SchemaParser.decodeEffect(success)(input.success, options), { |
| 9949 | onSuccess: Result_.succeed, |
| 9950 | onFailure: (issue) => SchemaIssue.makeCompositeAtKey(ast, "success", issue, input, options) |
| 9951 | }) |
| 9952 | case "Failure": |
| 9953 | return Effect.mapBothEager(SchemaParser.decodeEffect(failure)(input.failure, options), { |
| 9954 | onSuccess: Result_.fail, |
| 9955 | onFailure: (issue) => SchemaIssue.makeCompositeAtKey(ast, "failure", issue, input, options) |
| 9956 | }) |
| 9957 | } |
| 9958 | }, |
| 9959 | { |
| 9960 | representation: { |
| 9961 | id: "effect/schema/Result", |
| 9962 | payload: null |
| 9963 | }, |
| 9964 | toCode: ({ typeParameters }) => ({ |
| 9965 | runtime: `Schema.Result(${typeParameters[0].runtime}, ${typeParameters[1].runtime})`, |
| 9966 | Type: `Result.Result<${typeParameters[0].Type}, ${typeParameters[1].Type}>`, |
| 9967 | importDeclarations: [`import * as Result from "effect/Result"`] |
| 9968 | }), |
| 9969 | expected: "Result", |
| 9970 | toCodec: ([success, failure]) => |
| 9971 | link<Result_.Result<A["Encoded"], E["Encoded"]>>()( |
| 9972 | Union([ |
| 9973 | Struct({ _tag: Literal("Success"), success }), |
| 9974 | Struct({ _tag: Literal("Failure"), failure }) |
| 9975 | ]), |
| 9976 | SchemaTransformation.transform({ |
| 9977 | decode: (e): Result_.Result<A["Encoded"], E["Encoded"]> => |
| 9978 | e._tag === "Success" ? Result_.succeed(e.success) : Result_.fail(e.failure), |
| 9979 | encode: (r) => |
| 9980 | Result_.isSuccess(r) |
| 9981 | ? { _tag: "Success", success: r.success } as const |
| 9982 | : { _tag: "Failure", failure: r.failure } as const |
| 9983 | }) |
| 9984 | ), |
| 9985 | toArbitrary: ([success, failure]) => (fc, ctx) => { |
| 9986 | const terminal = oneOfArbitraries( |
| 9987 | fc, |
| 9988 | success.terminal?.map((a): Result_.Result<A["Type"], E["Type"]> => Result_.succeed(a)), |
| 9989 | failure.terminal?.map((e): Result_.Result<A["Type"], E["Type"]> => Result_.fail(e)) |
no test coverage detected