Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion codegen/astgen/v3/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,11 @@ func (c *codeGenAst) getDataTypes(pkg *daml.Package, module *daml.Module, module
}
case *daml.DefDataType_Variant:
tmplStruct.RawType = RawTypeVariant
// Check if this variant type has numeric tag byte mapping configured
variantKey := moduleName + "." + name
if tagMap, exists := c.fieldHints.VariantTagByteMap[variantKey]; exists {
tmplStruct.VariantTagMapping = tagMap
}
for _, field := range v.Variant.Fields {
fieldExtracted, typeExtracted, err := c.extractField(pkg, field)
if err != nil {
Expand Down Expand Up @@ -732,6 +737,8 @@ func (c *codeGenAst) handleConType(pkg *daml.Package, conType *daml.Type_Con) mo
switch name {
case "RelTime":
return model.RelTime{}
case "Set":
return model.Set{}
default:
return model.Unknown{String: name}
}
Expand All @@ -749,7 +756,15 @@ func (c *codeGenAst) handleConType(pkg *daml.Package, conType *daml.Type_Con) mo
}
}

return model.Unknown{String: name}
// Special handling for certain stdlib/DA types
switch name {
case "RelTime":
return model.RelTime{}
case "Set":
return model.Set{}
default:
return model.Unknown{String: name}
}
}

/*if conType == nil || conType.Tycon == nil {
Expand Down
98 changes: 98 additions & 0 deletions codegen/astgen/v3/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,107 @@ import (
"testing"

daml "github.com/digital-asset/dazl-client/v8/go/api/com/digitalasset/daml/lf/archive/daml_lf_2"
"github.com/smartcontractkit/go-daml/codegen/model"
"github.com/stretchr/testify/require"
)

func TestHandleConType_StdlibTypes(t *testing.T) {
codeGen := &codeGenAst{
externalPackages: model.ExternalPackages{
Packages: map[string]model.ExternalPackage{},
},
importedPackages: map[string]model.ExternalPackage{},
}

tests := []struct {
name string
typeName string
expectedType model.DamlType
}{
{"Set via InternedStr", "Set", model.Set{}},
{"RelTime via InternedStr", "RelTime", model.RelTime{}},
{"Unknown via InternedStr", "SomeOtherType", model.Unknown{String: "SomeOtherType"}},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
pkg := &daml.Package{
InternedStrings: []string{"", "da-set-pkg-id", tt.typeName},
InternedDottedNames: []*daml.InternedDottedName{
{SegmentsInternedStr: []int32{2}},
},
}

conType := &daml.Type_Con{
Tycon: &daml.TypeConId{
Module: &daml.ModuleId{
PackageId: &daml.SelfOrImportedPackageId{
Sum: &daml.SelfOrImportedPackageId_ImportedPackageIdInternedStr{
ImportedPackageIdInternedStr: 1,
},
},
},
NameInternedDname: 0,
},
}

result := codeGen.handleConType(pkg, conType)
require.Equal(t, tt.expectedType, result)
})
}
}

func TestHandleConType_PackageImportId_StdlibTypes(t *testing.T) {
codeGen := &codeGenAst{
externalPackages: model.ExternalPackages{
Packages: map[string]model.ExternalPackage{},
},
importedPackages: map[string]model.ExternalPackage{},
}

tests := []struct {
name string
typeName string
expectedType model.DamlType
}{
{"Set via PackageImportId", "Set", model.Set{}},
{"RelTime via PackageImportId", "RelTime", model.RelTime{}},
{"Unknown via PackageImportId", "SomeOtherType", model.Unknown{String: "SomeOtherType"}},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
pkg := &daml.Package{
InternedStrings: []string{"", tt.typeName},
InternedDottedNames: []*daml.InternedDottedName{
{SegmentsInternedStr: []int32{1}},
},
ImportsSum: &daml.Package_PackageImports{
PackageImports: &daml.PackageImports{
ImportedPackages: []string{"some-stdlib-package-id"},
},
},
}

conType := &daml.Type_Con{
Tycon: &daml.TypeConId{
Module: &daml.ModuleId{
PackageId: &daml.SelfOrImportedPackageId{
Sum: &daml.SelfOrImportedPackageId_PackageImportId{
PackageImportId: 0,
},
},
},
NameInternedDname: 0,
},
}

result := codeGen.handleConType(pkg, conType)
require.Equal(t, tt.expectedType, result)
})
}
}

func TestParseKeyExpressionV3(t *testing.T) {
codeGen := &codeGenAst{}

Expand Down
Loading
Loading