Handle sums-of-products correctly in daml ledger export
#15152
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR changes the encoding logic for values such that Variants with fields are encoded as valid Daml.
This works by adding a special case for the encoding of a
Variant
v
whosevalue
is aRecord
r
, wherer
andv
's package id and module name match and wherer
's entity name is equal tov
's plus.
and a suffix.Closes #14723
Spun off as #15153:
Note that there's still a problematic case:
This could represent a value of variant type
V
with constructorC
, whereC
takes no arguments, e.g.or a value of variant type
V a
with constructorC a
, wherea ~ ()
, e.g.There is no way to tell these apart without the type information at hand. We could make the
value
field ofVariant
optional, leavingvalue
unset for the former case and set asUnit
for the latter, but it's currently commented as Required in https://github.com/digital-asset/daml/blob/main/ledger-api/grpc-definitions/com/daml/ledger/api/v1/value.proto#L146-L148