diff --git a/src/Decode_AsResult_OfParseError.rei b/src/Decode_AsResult_OfParseError.rei index b30f9df..11d501e 100644 --- a/src/Decode_AsResult_OfParseError.rei +++ b/src/Decode_AsResult_OfParseError.rei @@ -248,6 +248,9 @@ let oneOf: ) => result('a, ParseError.failure); +let hush: + (Js.Json.t => result('a, ParseError.failure), Js.Json.t) => option('a); + [@deprecated "Will be removed in favor up the upcoming addition of letops"] module Pipeline: { let succeed: ('a, Js.Json.t) => result('a, ParseError.failure); diff --git a/src/Decode_Base.re b/src/Decode_Base.re index f8e8203..dcfef7c 100644 --- a/src/Decode_Base.re +++ b/src/Decode_Base.re @@ -214,6 +214,8 @@ module Make = let tupleFromFields = ((fieldA, decodeA), (fieldB, decodeB)) => map2(Tuple.make, field(fieldA, decodeA), field(fieldB, decodeB)); + let hush = (decode, json) => decode(json) |> Result.toOption; + module Pipeline = { let succeed = pure; diff --git a/test/Decode_AsResult_OfParseError_test.re b/test/Decode_AsResult_OfParseError_test.re index 4a868cc..a35ac55 100644 --- a/test/Decode_AsResult_OfParseError_test.re +++ b/test/Decode_AsResult_OfParseError_test.re @@ -14,6 +14,18 @@ let objErr = (first, rest) => let objErrSingle = (field, err) => objErr((field, err), []); +describe("Decode utils", () => { + test("hush (success)", () => { + let decodeBooleanOpt = Decode.(boolean |> hush); + expect(decodeBooleanOpt(Sample.jsonBool)) |> toEqual(Some(true)); + }); + + test("hush (failure)", () => { + let decodeStringOpt = Decode.(string |> hush); + expect(decodeStringOpt(Sample.jsonNull)) |> toEqual(None); + }); +}); + describe("Simple decoders", () => { test("boolean", () => expect(Decode.boolean(Sample.jsonNull))