From d7b9e8b1851fb3c551a86cb929dc44677edaf1e9 Mon Sep 17 00:00:00 2001 From: Nate Abele Date: Fri, 17 May 2019 18:18:36 -0400 Subject: [PATCH] Add `map()` methods for `Result` instances --- src/json-decoder.spec.ts | 5 +++-- src/result.ts | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/json-decoder.spec.ts b/src/json-decoder.spec.ts index b34aa18..fbb92a2 100644 --- a/src/json-decoder.spec.ts +++ b/src/json-decoder.spec.ts @@ -10,14 +10,15 @@ const expectOkWithValue = (result: Result, expectedValue: a) => expect(result) .to.be.an.instanceof(Ok) .and.to.deep.equal({ - value: expectedValue + value: expectedValue, + map: Ok.prototype.map }); const expectErr = (result: Result) => expect(result).to.be.an.instanceof(Err); const expectErrWithMsg = (result: Result, expectedErrorMsg: string) => expect(result) .to.be.an.instanceof(Err) - .and.to.deep.equal({ error: expectedErrorMsg }); + .and.to.deep.equal({ error: expectedErrorMsg, map: Err.prototype.map }); // Tests describe('json-decoder', () => { diff --git a/src/result.ts b/src/result.ts index 7ae1cb1..472ec13 100644 --- a/src/result.ts +++ b/src/result.ts @@ -1,8 +1,16 @@ export class Ok { constructor(readonly value: a) {} + + map(fn: (a: a) => b): Result { + return ok(fn(this.value)); + } } export class Err { constructor(readonly error: string) {} + + map(fn: (a: any) => b): Result { + return this; + } } export type Result = Ok | Err;