MCPcopy Create free account
hub / github.com/Effect-TS/effect / Result

Function Result

packages/effect/src/Schema.ts:9932–10006  ·  view source on GitHub ↗
(
  success: A,
  failure: E
)

Source from the content-addressed store, hash-verified

9930 * @since 4.0.0
9931 */
9932export 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))

Callers 1

Schema.tsFile · 0.70

Calls 14

oneOfArbitrariesFunction · 0.85
withRecursionFunction · 0.85
declareConstructorFunction · 0.70
linkFunction · 0.70
UnionFunction · 0.70
StructFunction · 0.70
LiteralFunction · 0.70
successFunction · 0.70
failureFunction · 0.70
makeFunction · 0.70
transformMethod · 0.65
failMethod · 0.45

Tested by

no test coverage detected