daml2ts: Lift type annotation for variant decoders to jtv.oneOf (#3994)

Currently, the generated decoder for, say, `Either` looks like
```ts
() => jtv.oneOf(
  jtv.object<Either<a, b>>(...),
  jtv.object<Either<a, b>>(...),
)
```
After this PR, the generated code will look like
```ts
() => jtv.oneOf<Either<a, b>>(
  jtv.object(...),
  jtv.object(...),
)
```
That saves us a few type annotations but nothing major.

CHANGELOG_BEGIN
CHANGELOG_END
This commit is contained in:
Martin Huschenbett 2020-01-09 13:22:45 +01:00 committed by mergify[bot]
parent 7260de61c4
commit 1d07d82962

View File

@ -125,7 +125,7 @@ genDefDataType curModName tpls def = case unTypeConName (dataTypeCon def) of
let
(typs, sers) = unzip $ map genBranch bs
typeDesc = [""] ++ typs
serDesc = ["() => jtv.oneOf("] ++ sers ++ [")"]
serDesc = ["() => jtv.oneOf<" <> conName <> typeParams <> ">("] ++ sers ++ [")"]
in
((makeType typeDesc, makeSer serDesc), Set.unions $ map (Set.setOf typeModuleRef . snd) bs)
DataEnum enumCons ->
@ -231,7 +231,7 @@ genDefDataType curModName tpls def = case unTypeConName (dataTypeCon def) of
genBranch (VariantConName cons, t) =
let (typ, ser) = genType curModName t in
( " | { tag: '" <> cons <> "'; value: " <> typ <> " }"
, " jtv.object<" <> conName <> typeParams <> ">({tag: jtv.constant('" <> cons <> "'), value: jtv.lazy(() => " <> ser <> ".decoder())}),"
, " jtv.object({tag: jtv.constant('" <> cons <> "'), value: jtv.lazy(() => " <> ser <> ".decoder())}),"
)