All files Map2.ts

100% Statements 18/18
100% Branches 2/2
100% Functions 7/7
100% Lines 17/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 311x   1x   1x           1x 1x 1x 1x     1x 3x 3x 3x   3x 1x 2x 1x 1x       1x  
import * as ValidationFn from 'fp-ts/lib/Validation';
 
import Decoder, { Decoded } from './Decoder';
 
export default class Map2<a, b, c> extends Decoder<c> {
  private fn: (valueA: a, valueB: b) => c;
  private decoderA: Decoder<a>;
  private decoderB: Decoder<b>;
 
  constructor(fn: (value: a, valueB: b) => c, decoderA: Decoder<a>, decoderB: Decoder<b>) {
    super();
    this.decoderA = decoderA;
    this.decoderB = decoderB;
    this.fn = fn;
  }
 
  public run(value: unknown): Decoded<c> {
    const decoderA = this.decoderA;
    const decoderB = this.decoderB;
    const fn = this.fn;
 
    return decoderA.run(value).fold(
      (errorsA) => ValidationFn.failure(errorsA),
      (successA) => decoderB.run(value).fold(
        (errorsB) => ValidationFn.failure(errorsB),
        (successB) => ValidationFn.success(fn(successA, successB)),
      ),
    );
  }
}