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(); }