From 690bbfcfd85ac63749c69eb6e29a7cc734b38d2c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Sat, 14 Dec 2019 18:00:03 +0100 Subject: nicer unions --- src/util/codec-test.ts | 3 ++- src/util/codec.ts | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'src/util') diff --git a/src/util/codec-test.ts b/src/util/codec-test.ts index 0d1ab5603..640cd7c1c 100644 --- a/src/util/codec-test.ts +++ b/src/util/codec-test.ts @@ -64,7 +64,8 @@ test("union", t => { .property("type", stringConstCodec("two")) .property("bar", stringCodec) .build("AltTwo"); - const myUnionCodec: Codec = unionCodec("type") + const myUnionCodec: Codec = unionCodec() + .discriminateOn("type") .alternative("one", altOneCodec) .alternative("two", altTwoCodec) .build("MyUnion"); diff --git a/src/util/codec.ts b/src/util/codec.ts index 78516183c..a6fe74905 100644 --- a/src/util/codec.ts +++ b/src/util/codec.ts @@ -233,6 +233,12 @@ export function mapCodec(innerCodec: Codec): Codec<{ [x: string]: T }> { }; } +export class UnionCodecPreBuilder { + discriminateOn(discriminator: D): UnionCodecBuilder { + return new UnionCodecBuilder(discriminator); + } +} + /** * Return a builder for a codec that decodes an object with properties. */ @@ -240,8 +246,6 @@ export function objectCodec(): ObjectCodecBuilder { return new ObjectCodecBuilder(); } -export function unionCodec( - discriminator: D, -): UnionCodecBuilder { - return new UnionCodecBuilder(discriminator); +export function unionCodec(): UnionCodecPreBuilder { + return new UnionCodecPreBuilder(); } -- cgit v1.2.3