v23proxy: fix tests and add go-only jiri test
The go-only jiri test is so that we can run tests of most of the
functionality on jenkins. Currently, the tests are disabled because
there is an issue involving dart.
MultiPart: 2/2
Change-Id: Ia65e002ca75818190227e500993b3fa9e7082cd3
diff --git a/Makefile b/Makefile
index 01d1a15..4c644f4 100644
--- a/Makefile
+++ b/Makefile
@@ -129,14 +129,29 @@
$(BUILD_DIR)/echo_server.mojo: gen/go/src/mojom/examples/echo/echo.mojom.go
$(call MOGO_BUILD,examples/echo/server,$@)
-.PHONY: test-integration
-test-integration: mock packages $(BUILD_DIR)/test_client.mojo $(BUILD_DIR)/test_server.mojo $(BUILD_DIR)/v23clientproxy.mojo $(BUILD_DIR)/v23serverproxy.mojo
- GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go || ($(MAKE) unmock && exit 1)
- GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,v23:dart,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go -client dart || ($(MAKE) unmock && exit 1)
- GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,v23:dart,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go -server dart || ($(MAKE) unmock && exit 1)
- GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,v23:dart,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go -client dart -server dart || ($(MAKE) unmock && exit 1)
+.PHONY: test-integration-depends
+test-integration-depends: mock packages $(BUILD_DIR)/test_client.mojo $(BUILD_DIR)/test_server.mojo $(BUILD_DIR)/v23clientproxy.mojo $(BUILD_DIR)/v23serverproxy.mojo
$(MAKE) unmock
+.PHONY: test-integration-go-go
+test-integration-go-go: test-integration-depends
+ GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go || ($(MAKE) unmock && exit 1)
+
+.PHONY: test-integration-dart-go
+test-integration-dart-go: test-integration-depends
+ GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,v23:dart,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go -client dart || ($(MAKE) unmock && exit 1)
+
+.PHONY: test-integration-go-dart
+test-integration-go-dart: test-integration-depends
+ GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,v23:dart,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go -server dart || ($(MAKE) unmock && exit 1)
+
+.PHONY: test-integration-dart-dart
+test-integration-dart-dart: test-integration-depends
+ GOPATH=$(PWD)/go:$(PWD)/gen/go jiri go -profiles=v23:base,v23:dart,$(MOJO_PROFILE) run go/src/v.io/x/mojo/tests/cmd/runtest.go -client dart -server dart || ($(MAKE) unmock && exit 1)
+
+.PHONY: test-integration
+test-integration: test-integration-go-go test-integration-dart-go test-integration-go-dart test-integration-dart-dart
+
$(BUILD_DIR)/test_client.mojo: go/src/v.io/x/mojo/tests/client/test_client.go gen/go/src/mojom/tests/end_to_end_test/end_to_end_test.mojom.go dart-tests/end_to_end_test/lib/gen/dart-gen/mojom/lib/mojo/v23proxy/tests/end_to_end_test.mojom.dart gen/go/src/mojom/v23clientproxy/v23clientproxy.mojom.go
$(call MOGO_BUILD,v.io/x/mojo/tests/client,$@)
diff --git a/go/src/v.io/x/mojo/proxy/util/util.go b/go/src/v.io/x/mojo/proxy/util/util.go
index 7967d9d..889e786 100644
--- a/go/src/v.io/x/mojo/proxy/util/util.go
+++ b/go/src/v.io/x/mojo/proxy/util/util.go
@@ -46,6 +46,21 @@
return nil
}
+func (ft *structSplitFieldsTarget) ZeroField(name string) (error) {
+ key, field, err := ft.StartField(name)
+ if err != nil {
+ return err
+ }
+ fld, index := ft.targ.tt.FieldByName(name)
+ if index < 0 {
+ return vdl.ErrFieldNoExist
+ }
+ if err := vdl.FromValue(field, vdl.ZeroValue(fld.Type)); err != nil {
+ return err
+ }
+ return ft.FinishField(key, field)
+}
+
func StructSplitTarget() *structSplitTarget {
return &structSplitTarget{}
}
diff --git a/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go b/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go
index 83fb2a3..8cb994e 100644
--- a/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go
+++ b/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go
@@ -185,6 +185,144 @@
return nil
}
+func (x AddressInfo) VDLIsZero() bool {
+ return x == AddressInfo{}
+}
+
+func (x AddressInfo) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*AddressInfo)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.Street != "" {
+ if err := enc.NextField("Street"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.Street); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.City != "" {
+ if err := enc.NextField("City"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.City); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.State != "" {
+ if err := enc.NextField("State"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.State); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.Zip != "" {
+ if err := enc.NextField("Zip"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.Zip); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *AddressInfo) VDLRead(dec vdl.Decoder) error {
+ *x = AddressInfo{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "Street":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.Street, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "City":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.City, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "State":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.State, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "Zip":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.Zip, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type CreditAgency int
const (
@@ -273,6 +411,34 @@
return nil
}
+func (x CreditAgency) VDLIsZero() bool {
+ return x == CreditAgencyEquifax
+}
+
+func (x CreditAgency) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*CreditAgency)(nil))); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.String()); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *CreditAgency) VDLRead(dec vdl.Decoder) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ enum, err := dec.DecodeString()
+ if err != nil {
+ return err
+ }
+ if err := x.Set(enum); err != nil {
+ return err
+ }
+ return dec.FinishValue()
+}
+
type ExperianRating int
const (
@@ -353,6 +519,34 @@
return nil
}
+func (x ExperianRating) VDLIsZero() bool {
+ return x == ExperianRatingGood
+}
+
+func (x ExperianRating) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ExperianRating)(nil))); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.String()); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *ExperianRating) VDLRead(dec vdl.Decoder) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ enum, err := dec.DecodeString()
+ if err != nil {
+ return err
+ }
+ if err := x.Set(enum); err != nil {
+ return err
+ }
+ return dec.FinishValue()
+}
+
type EquifaxCreditReport struct {
Rating byte
}
@@ -437,6 +631,70 @@
return nil
}
+func (x EquifaxCreditReport) VDLIsZero() bool {
+ return x == EquifaxCreditReport{}
+}
+
+func (x EquifaxCreditReport) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*EquifaxCreditReport)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.Rating != 0 {
+ if err := enc.NextField("Rating"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.ByteType); err != nil {
+ return err
+ }
+ if err := enc.EncodeUint(uint64(x.Rating)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *EquifaxCreditReport) VDLRead(dec vdl.Decoder) error {
+ *x = EquifaxCreditReport{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "Rating":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeUint(8)
+ if err != nil {
+ return err
+ }
+ x.Rating = byte(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type ExperianCreditReport struct {
Rating ExperianRating
}
@@ -522,6 +780,56 @@
return nil
}
+func (x ExperianCreditReport) VDLIsZero() bool {
+ return x == ExperianCreditReport{}
+}
+
+func (x ExperianCreditReport) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ExperianCreditReport)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.Rating != ExperianRatingGood {
+ if err := enc.NextField("Rating"); err != nil {
+ return err
+ }
+ if err := x.Rating.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *ExperianCreditReport) VDLRead(dec vdl.Decoder) error {
+ *x = ExperianCreditReport{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "Rating":
+ if err := x.Rating.VDLRead(dec); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type TransUnionCreditReport struct {
Rating int16
}
@@ -606,6 +914,70 @@
return nil
}
+func (x TransUnionCreditReport) VDLIsZero() bool {
+ return x == TransUnionCreditReport{}
+}
+
+func (x TransUnionCreditReport) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*TransUnionCreditReport)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.Rating != 0 {
+ if err := enc.NextField("Rating"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int16Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Rating)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *TransUnionCreditReport) VDLRead(dec vdl.Decoder) error {
+ *x = TransUnionCreditReport{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "Rating":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(16)
+ if err != nil {
+ return err
+ }
+ x.Rating = int16(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type (
// AgencyReport represents any single field of the AgencyReport union type.
AgencyReport interface {
@@ -618,6 +990,8 @@
// __VDLReflect describes the AgencyReport union type.
__VDLReflect(__AgencyReportReflect)
FillVDLTarget(vdl.Target, *vdl.Type) error
+ VDLIsZero() bool
+ VDLWrite(vdl.Encoder) error
}
// AgencyReportEquifaxReport represents field EquifaxReport of the AgencyReport union type.
AgencyReportEquifaxReport struct{ Value EquifaxCreditReport }
@@ -790,6 +1164,110 @@
return nil, fmt.Errorf("got %T, want *AgencyReport", union)
}
+func (x AgencyReportEquifaxReport) VDLIsZero() bool {
+ return x.Value == EquifaxCreditReport{}
+}
+
+func (x AgencyReportExperianReport) VDLIsZero() bool {
+ return false
+}
+
+func (x AgencyReportTransUnionReport) VDLIsZero() bool {
+ return false
+}
+
+func (x AgencyReportEquifaxReport) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*AgencyReport)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("EquifaxReport"); err != nil {
+ return err
+ }
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x AgencyReportExperianReport) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*AgencyReport)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("ExperianReport"); err != nil {
+ return err
+ }
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x AgencyReportTransUnionReport) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*AgencyReport)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("TransUnionReport"); err != nil {
+ return err
+ }
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func VDLReadAgencyReport(dec vdl.Decoder, x *AgencyReport) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(x), dec.Type()) {
+ return fmt.Errorf("incompatible union %T, from %v", x, dec.Type())
+ }
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "EquifaxReport":
+ var field AgencyReportEquifaxReport
+ if err := field.Value.VDLRead(dec); err != nil {
+ return err
+ }
+ *x = field
+ case "ExperianReport":
+ var field AgencyReportExperianReport
+ if err := field.Value.VDLRead(dec); err != nil {
+ return err
+ }
+ *x = field
+ case "TransUnionReport":
+ var field AgencyReportTransUnionReport
+ if err := field.Value.VDLRead(dec); err != nil {
+ return err
+ }
+ *x = field
+ case "":
+ return fmt.Errorf("missing field in union %T, from %v", x, dec.Type())
+ default:
+ return fmt.Errorf("field %q not in union %T, from %v", f, x, dec.Type())
+ }
+ switch f, err := dec.NextField(); {
+ case err != nil:
+ return err
+ case f != "":
+ return fmt.Errorf("extra field %q in union %T, from %v", f, x, dec.Type())
+ }
+ return dec.FinishValue()
+}
+
type CreditReport struct {
Agency CreditAgency
Report AgencyReport
@@ -913,6 +1391,76 @@
return nil
}
+func (x CreditReport) VDLIsZero() bool {
+ if x.Agency != CreditAgencyEquifax {
+ return false
+ }
+ if x.Report != nil && !x.Report.VDLIsZero() {
+ return false
+ }
+ return true
+}
+
+func (x CreditReport) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*CreditReport)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.Agency != CreditAgencyEquifax {
+ if err := enc.NextField("Agency"); err != nil {
+ return err
+ }
+ if err := x.Agency.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if x.Report != nil && !x.Report.VDLIsZero() {
+ if err := enc.NextField("Report"); err != nil {
+ return err
+ }
+ if err := x.Report.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *CreditReport) VDLRead(dec vdl.Decoder) error {
+ *x = CreditReport{
+ Report: AgencyReportEquifaxReport{},
+ }
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "Agency":
+ if err := x.Agency.VDLRead(dec); err != nil {
+ return err
+ }
+ case "Report":
+ if err := VDLReadAgencyReport(dec, &x.Report); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type Customer struct {
Name string
Id int64
@@ -1115,6 +1663,162 @@
return nil
}
+func (x Customer) VDLIsZero() bool {
+ if x.Name != "" {
+ return false
+ }
+ if x.Id != 0 {
+ return false
+ }
+ if x.Active {
+ return false
+ }
+ if x.Address != (AddressInfo{}) {
+ return false
+ }
+ if !x.Credit.VDLIsZero() {
+ return false
+ }
+ return true
+}
+
+func (x Customer) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*Customer)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.Name != "" {
+ if err := enc.NextField("Name"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.Name); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.Id != 0 {
+ if err := enc.NextField("Id"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int64Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(x.Id); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.Active {
+ if err := enc.NextField("Active"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.BoolType); err != nil {
+ return err
+ }
+ if err := enc.EncodeBool(x.Active); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.Address != (AddressInfo{}) {
+ if err := enc.NextField("Address"); err != nil {
+ return err
+ }
+ if err := x.Address.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if !x.Credit.VDLIsZero() {
+ if err := enc.NextField("Credit"); err != nil {
+ return err
+ }
+ if err := x.Credit.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *Customer) VDLRead(dec vdl.Decoder) error {
+ *x = Customer{
+ Credit: CreditReport{
+ Report: AgencyReportEquifaxReport{},
+ },
+ }
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "Name":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.Name, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "Id":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.Id, err = dec.DecodeInt(64); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "Active":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.Active, err = dec.DecodeBool(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "Address":
+ if err := x.Address.VDLRead(dec); err != nil {
+ return err
+ }
+ case "Credit":
+ if err := x.Credit.VDLRead(dec); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
var __VDLInitCalled bool
// __VDLInit performs vdl initialization. It is safe to call multiple times.
diff --git a/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go b/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go
index fae9534..36ea9df 100644
--- a/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go
+++ b/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go
@@ -97,6 +97,34 @@
return nil
}
+func (x AnEnum) VDLIsZero() bool {
+ return x == AnEnumFirst
+}
+
+func (x AnEnum) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*AnEnum)(nil))); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.String()); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *AnEnum) VDLRead(dec vdl.Decoder) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ enum, err := dec.DecodeString()
+ if err != nil {
+ return err
+ }
+ if err := x.Set(enum); err != nil {
+ return err
+ }
+ return dec.FinishValue()
+}
+
type (
// PodUnion represents any single field of the PodUnion union type.
PodUnion interface {
@@ -109,6 +137,8 @@
// __VDLReflect describes the PodUnion union type.
__VDLReflect(__PodUnionReflect)
FillVDLTarget(vdl.Target, *vdl.Type) error
+ VDLIsZero() bool
+ VDLWrite(vdl.Encoder) error
}
// PodUnionFInt8 represents field FInt8 of the PodUnion union type.
PodUnionFInt8 struct{ Value int8 }
@@ -669,6 +699,534 @@
return nil, fmt.Errorf("got %T, want *PodUnion", union)
}
+func (x PodUnionFInt8) VDLIsZero() bool {
+ return x.Value == 0
+}
+
+func (x PodUnionFInt8Other) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFUint8) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFInt16) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFUint16) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFint32) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFuint32) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFInt64) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFUint64) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFFloat) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFDouble) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFBool) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFEnum) VDLIsZero() bool {
+ return false
+}
+
+func (x PodUnionFInt8) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FInt8"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int8Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFInt8Other) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FInt8Other"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int8Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFUint8) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FUint8"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.ByteType); err != nil {
+ return err
+ }
+ if err := enc.EncodeUint(uint64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFInt16) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FInt16"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int16Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFUint16) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FUint16"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Uint16Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeUint(uint64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFint32) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("Fint32"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFuint32) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("Fuint32"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Uint32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeUint(uint64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFInt64) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FInt64"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int64Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(x.Value); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFUint64) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FUint64"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Uint64Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeUint(x.Value); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFFloat) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FFloat"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Float32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeFloat(float64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFDouble) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FDouble"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Float64Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeFloat(x.Value); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFBool) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FBool"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.BoolType); err != nil {
+ return err
+ }
+ if err := enc.EncodeBool(x.Value); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x PodUnionFEnum) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FEnum"); err != nil {
+ return err
+ }
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func VDLReadPodUnion(dec vdl.Decoder, x *PodUnion) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(x), dec.Type()) {
+ return fmt.Errorf("incompatible union %T, from %v", x, dec.Type())
+ }
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "FInt8":
+ var field PodUnionFInt8
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(8)
+ if err != nil {
+ return err
+ }
+ field.Value = int8(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FInt8Other":
+ var field PodUnionFInt8Other
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(8)
+ if err != nil {
+ return err
+ }
+ field.Value = int8(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FUint8":
+ var field PodUnionFUint8
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeUint(8)
+ if err != nil {
+ return err
+ }
+ field.Value = byte(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FInt16":
+ var field PodUnionFInt16
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(16)
+ if err != nil {
+ return err
+ }
+ field.Value = int16(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FUint16":
+ var field PodUnionFUint16
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeUint(16)
+ if err != nil {
+ return err
+ }
+ field.Value = uint16(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "Fint32":
+ var field PodUnionFint32
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(32)
+ if err != nil {
+ return err
+ }
+ field.Value = int32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "Fuint32":
+ var field PodUnionFuint32
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeUint(32)
+ if err != nil {
+ return err
+ }
+ field.Value = uint32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FInt64":
+ var field PodUnionFInt64
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if field.Value, err = dec.DecodeInt(64); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FUint64":
+ var field PodUnionFUint64
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if field.Value, err = dec.DecodeUint(64); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FFloat":
+ var field PodUnionFFloat
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeFloat(32)
+ if err != nil {
+ return err
+ }
+ field.Value = float32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FDouble":
+ var field PodUnionFDouble
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if field.Value, err = dec.DecodeFloat(64); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FBool":
+ var field PodUnionFBool
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if field.Value, err = dec.DecodeBool(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FEnum":
+ var field PodUnionFEnum
+ if err := field.Value.VDLRead(dec); err != nil {
+ return err
+ }
+ *x = field
+ case "":
+ return fmt.Errorf("missing field in union %T, from %v", x, dec.Type())
+ default:
+ return fmt.Errorf("field %q not in union %T, from %v", f, x, dec.Type())
+ }
+ switch f, err := dec.NextField(); {
+ case err != nil:
+ return err
+ case f != "":
+ return fmt.Errorf("extra field %q in union %T, from %v", f, x, dec.Type())
+ }
+ return dec.FinishValue()
+}
+
type PodUnionWrapper struct {
PodUnion PodUnion
}
@@ -763,6 +1321,61 @@
return nil
}
+func (x PodUnionWrapper) VDLIsZero() bool {
+ if x.PodUnion != nil && !x.PodUnion.VDLIsZero() {
+ return false
+ }
+ return true
+}
+
+func (x PodUnionWrapper) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*PodUnionWrapper)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.PodUnion != nil && !x.PodUnion.VDLIsZero() {
+ if err := enc.NextField("PodUnion"); err != nil {
+ return err
+ }
+ if err := x.PodUnion.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *PodUnionWrapper) VDLRead(dec vdl.Decoder) error {
+ *x = PodUnionWrapper{
+ PodUnion: PodUnionFInt8{},
+ }
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "PodUnion":
+ if err := VDLReadPodUnion(dec, &x.PodUnion); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type DummyStruct struct {
FInt8 int8
}
@@ -847,6 +1460,70 @@
return nil
}
+func (x DummyStruct) VDLIsZero() bool {
+ return x == DummyStruct{}
+}
+
+func (x DummyStruct) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*DummyStruct)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.FInt8 != 0 {
+ if err := enc.NextField("FInt8"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int8Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.FInt8)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *DummyStruct) VDLRead(dec vdl.Decoder) error {
+ *x = DummyStruct{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "FInt8":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(8)
+ if err != nil {
+ return err
+ }
+ x.FInt8 = int8(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type (
// ObjectUnion represents any single field of the ObjectUnion union type.
ObjectUnion interface {
@@ -859,6 +1536,8 @@
// __VDLReflect describes the ObjectUnion union type.
__VDLReflect(__ObjectUnionReflect)
FillVDLTarget(vdl.Target, *vdl.Type) error
+ VDLIsZero() bool
+ VDLWrite(vdl.Encoder) error
}
// ObjectUnionFInt8 represents field FInt8 of the ObjectUnion union type.
ObjectUnionFInt8 struct{ Value int8 }
@@ -1337,6 +2016,432 @@
return nil
}
+func (x ObjectUnionFInt8) VDLIsZero() bool {
+ return x.Value == 0
+}
+
+func (x ObjectUnionFString) VDLIsZero() bool {
+ return false
+}
+
+func (x ObjectUnionFDummy) VDLIsZero() bool {
+ return false
+}
+
+func (x ObjectUnionFNullable) VDLIsZero() bool {
+ return false
+}
+
+func (x ObjectUnionFArrayInt8) VDLIsZero() bool {
+ return false
+}
+
+func (x ObjectUnionFMapInt8) VDLIsZero() bool {
+ return false
+}
+
+func (x ObjectUnionFPodUnion) VDLIsZero() bool {
+ return false
+}
+
+func (x ObjectUnionFInt8) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FInt8"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int8Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Value)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x ObjectUnionFString) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FString"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.Value); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x ObjectUnionFDummy) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FDummy"); err != nil {
+ return err
+ }
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x ObjectUnionFNullable) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FNullable"); err != nil {
+ return err
+ }
+ if x.Value == nil {
+ if err := enc.NilValue(vdl.TypeOf((**DummyStruct)(nil))); err != nil {
+ return err
+ }
+ } else {
+ enc.SetNextStartValueIsOptional()
+ if err := enc.StartValue(vdl.TypeOf((*DummyStruct)(nil)).Elem()); err != nil {
+ return err
+ }
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x ObjectUnionFArrayInt8) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FArrayInt8"); err != nil {
+ return err
+ }
+ if err := __VDLWriteAnon_list_1(enc, x.Value); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x ObjectUnionFMapInt8) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FMapInt8"); err != nil {
+ return err
+ }
+ if err := __VDLWriteAnon_map_2(enc, x.Value); err != nil {
+ return err
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x ObjectUnionFPodUnion) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnion)(nil))); err != nil {
+ return err
+ }
+ if err := enc.NextField("FPodUnion"); err != nil {
+ return err
+ }
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ switch {
+ case x.Value == nil:
+ // Write the zero value of the union type.
+ if err := vdl.ZeroValue(vdl.TypeOf((*PodUnion)(nil))).VDLWrite(enc); err != nil {
+ return err
+ }
+ default:
+ if err := x.Value.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func __VDLWriteAnon_list_1(enc vdl.Encoder, x []int8) error {
+ if err := enc.StartValue(vdl.TypeOf((*[]int8)(nil))); err != nil {
+ return err
+ }
+ if err := enc.SetLenHint(len(x)); err != nil {
+ return err
+ }
+ for i := 0; i < len(x); i++ {
+ if err := enc.NextEntry(false); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int8Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x[i])); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextEntry(true); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func __VDLWriteAnon_map_2(enc vdl.Encoder, x map[string]int8) error {
+ if err := enc.StartValue(vdl.TypeOf((*map[string]int8)(nil))); err != nil {
+ return err
+ }
+ if err := enc.SetLenHint(len(x)); err != nil {
+ return err
+ }
+ for key, elem := range x {
+ if err := enc.NextEntry(false); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(key); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int8Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(elem)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextEntry(true); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func VDLReadObjectUnion(dec vdl.Decoder, x *ObjectUnion) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(x), dec.Type()) {
+ return fmt.Errorf("incompatible union %T, from %v", x, dec.Type())
+ }
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "FInt8":
+ var field ObjectUnionFInt8
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(8)
+ if err != nil {
+ return err
+ }
+ field.Value = int8(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FString":
+ var field ObjectUnionFString
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if field.Value, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = field
+ case "FDummy":
+ var field ObjectUnionFDummy
+ if err := field.Value.VDLRead(dec); err != nil {
+ return err
+ }
+ *x = field
+ case "FNullable":
+ var field ObjectUnionFNullable
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if dec.IsNil() {
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(field.Value), dec.Type()) {
+ return fmt.Errorf("incompatible optional %T, from %v", field.Value, dec.Type())
+ }
+ field.Value = nil
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ } else {
+ field.Value = new(DummyStruct)
+ dec.IgnoreNextStartValue()
+ if err := field.Value.VDLRead(dec); err != nil {
+ return err
+ }
+ }
+ *x = field
+ case "FArrayInt8":
+ var field ObjectUnionFArrayInt8
+ if err := __VDLReadAnon_list_1(dec, &field.Value); err != nil {
+ return err
+ }
+ *x = field
+ case "FMapInt8":
+ var field ObjectUnionFMapInt8
+ if err := __VDLReadAnon_map_2(dec, &field.Value); err != nil {
+ return err
+ }
+ *x = field
+ case "FPodUnion":
+ var field ObjectUnionFPodUnion
+ if err := VDLReadPodUnion(dec, &field.Value); err != nil {
+ return err
+ }
+ *x = field
+ case "":
+ return fmt.Errorf("missing field in union %T, from %v", x, dec.Type())
+ default:
+ return fmt.Errorf("field %q not in union %T, from %v", f, x, dec.Type())
+ }
+ switch f, err := dec.NextField(); {
+ case err != nil:
+ return err
+ case f != "":
+ return fmt.Errorf("extra field %q in union %T, from %v", f, x, dec.Type())
+ }
+ return dec.FinishValue()
+}
+
+func __VDLReadAnon_list_1(dec vdl.Decoder, x *[]int8) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible list %T, from %v", *x, dec.Type())
+ }
+ switch len := dec.LenHint(); {
+ case len > 0:
+ *x = make([]int8, 0, len)
+ default:
+ *x = nil
+ }
+ for {
+ switch done, err := dec.NextEntry(); {
+ case err != nil:
+ return err
+ case done:
+ return dec.FinishValue()
+ }
+ var elem int8
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(8)
+ if err != nil {
+ return err
+ }
+ elem = int8(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ *x = append(*x, elem)
+ }
+}
+
+func __VDLReadAnon_map_2(dec vdl.Decoder, x *map[string]int8) error {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible map %T, from %v", *x, dec.Type())
+ }
+ var tmpMap map[string]int8
+ if len := dec.LenHint(); len > 0 {
+ tmpMap = make(map[string]int8, len)
+ }
+ for {
+ switch done, err := dec.NextEntry(); {
+ case err != nil:
+ return err
+ case done:
+ *x = tmpMap
+ return dec.FinishValue()
+ }
+ var key string
+ {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if key, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ }
+ var elem int8
+ {
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(8)
+ if err != nil {
+ return err
+ }
+ elem = int8(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if tmpMap == nil {
+ tmpMap = make(map[string]int8)
+ }
+ tmpMap[key] = elem
+ }
+}
+
type ObjectUnionWrapper struct {
ObjectUnion ObjectUnion
}
@@ -1431,6 +2536,61 @@
return nil
}
+func (x ObjectUnionWrapper) VDLIsZero() bool {
+ if x.ObjectUnion != nil && !x.ObjectUnion.VDLIsZero() {
+ return false
+ }
+ return true
+}
+
+func (x ObjectUnionWrapper) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*ObjectUnionWrapper)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.ObjectUnion != nil && !x.ObjectUnion.VDLIsZero() {
+ if err := enc.NextField("ObjectUnion"); err != nil {
+ return err
+ }
+ if err := x.ObjectUnion.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *ObjectUnionWrapper) VDLRead(dec vdl.Decoder) error {
+ *x = ObjectUnionWrapper{
+ ObjectUnion: ObjectUnionFInt8{},
+ }
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "ObjectUnion":
+ if err := VDLReadObjectUnion(dec, &x.ObjectUnion); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type Rect struct {
X int32
Y int32
@@ -1599,6 +2759,148 @@
return nil
}
+func (x Rect) VDLIsZero() bool {
+ return x == Rect{}
+}
+
+func (x Rect) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*Rect)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.X != 0 {
+ if err := enc.NextField("X"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.X)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.Y != 0 {
+ if err := enc.NextField("Y"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Y)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.Width != 0 {
+ if err := enc.NextField("Width"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Width)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.Height != 0 {
+ if err := enc.NextField("Height"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.Height)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *Rect) VDLRead(dec vdl.Decoder) error {
+ *x = Rect{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "X":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(32)
+ if err != nil {
+ return err
+ }
+ x.X = int32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "Y":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(32)
+ if err != nil {
+ return err
+ }
+ x.Y = int32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "Width":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(32)
+ if err != nil {
+ return err
+ }
+ x.Width = int32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "Height":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(32)
+ if err != nil {
+ return err
+ }
+ x.Height = int32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type MultiVersionStruct struct {
FInt32 int32
FRect Rect
@@ -1844,6 +3146,188 @@
return nil
}
+func (x MultiVersionStruct) VDLIsZero() bool {
+ if x.FInt32 != 0 {
+ return false
+ }
+ if x.FRect != (Rect{}) {
+ return false
+ }
+ if x.FString != "" {
+ return false
+ }
+ if len(x.FArray) != 0 {
+ return false
+ }
+ if x.FBool {
+ return false
+ }
+ if x.FInt16 != 0 {
+ return false
+ }
+ return true
+}
+
+func (x MultiVersionStruct) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*MultiVersionStruct)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.FInt32 != 0 {
+ if err := enc.NextField("FInt32"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.FInt32)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.FRect != (Rect{}) {
+ if err := enc.NextField("FRect"); err != nil {
+ return err
+ }
+ if err := x.FRect.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if x.FString != "" {
+ if err := enc.NextField("FString"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.FString); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if len(x.FArray) != 0 {
+ if err := enc.NextField("FArray"); err != nil {
+ return err
+ }
+ if err := __VDLWriteAnon_list_1(enc, x.FArray); err != nil {
+ return err
+ }
+ }
+ if x.FBool {
+ if err := enc.NextField("FBool"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.BoolType); err != nil {
+ return err
+ }
+ if err := enc.EncodeBool(x.FBool); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.FInt16 != 0 {
+ if err := enc.NextField("FInt16"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int16Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.FInt16)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *MultiVersionStruct) VDLRead(dec vdl.Decoder) error {
+ *x = MultiVersionStruct{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "FInt32":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(32)
+ if err != nil {
+ return err
+ }
+ x.FInt32 = int32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "FRect":
+ if err := x.FRect.VDLRead(dec); err != nil {
+ return err
+ }
+ case "FString":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.FString, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "FArray":
+ if err := __VDLReadAnon_list_1(dec, &x.FArray); err != nil {
+ return err
+ }
+ case "FBool":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.FBool, err = dec.DecodeBool(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "FInt16":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(16)
+ if err != nil {
+ return err
+ }
+ x.FInt16 = int16(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
type MultiVersionStructV3 struct {
FInt32 int32
FRect Rect
@@ -1985,6 +3469,107 @@
return nil
}
+func (x MultiVersionStructV3) VDLIsZero() bool {
+ return x == MultiVersionStructV3{}
+}
+
+func (x MultiVersionStructV3) VDLWrite(enc vdl.Encoder) error {
+ if err := enc.StartValue(vdl.TypeOf((*MultiVersionStructV3)(nil)).Elem()); err != nil {
+ return err
+ }
+ if x.FInt32 != 0 {
+ if err := enc.NextField("FInt32"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.Int32Type); err != nil {
+ return err
+ }
+ if err := enc.EncodeInt(int64(x.FInt32)); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if x.FRect != (Rect{}) {
+ if err := enc.NextField("FRect"); err != nil {
+ return err
+ }
+ if err := x.FRect.VDLWrite(enc); err != nil {
+ return err
+ }
+ }
+ if x.FString != "" {
+ if err := enc.NextField("FString"); err != nil {
+ return err
+ }
+ if err := enc.StartValue(vdl.StringType); err != nil {
+ return err
+ }
+ if err := enc.EncodeString(x.FString); err != nil {
+ return err
+ }
+ if err := enc.FinishValue(); err != nil {
+ return err
+ }
+ }
+ if err := enc.NextField(""); err != nil {
+ return err
+ }
+ return enc.FinishValue()
+}
+
+func (x *MultiVersionStructV3) VDLRead(dec vdl.Decoder) error {
+ *x = MultiVersionStructV3{}
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ if (dec.StackDepth() == 1 || dec.IsAny()) && !vdl.Compatible(vdl.TypeOf(*x), dec.Type()) {
+ return fmt.Errorf("incompatible struct %T, from %v", *x, dec.Type())
+ }
+ for {
+ f, err := dec.NextField()
+ if err != nil {
+ return err
+ }
+ switch f {
+ case "":
+ return dec.FinishValue()
+ case "FInt32":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ tmp, err := dec.DecodeInt(32)
+ if err != nil {
+ return err
+ }
+ x.FInt32 = int32(tmp)
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ case "FRect":
+ if err := x.FRect.VDLRead(dec); err != nil {
+ return err
+ }
+ case "FString":
+ if err := dec.StartValue(); err != nil {
+ return err
+ }
+ var err error
+ if x.FString, err = dec.DecodeString(); err != nil {
+ return err
+ }
+ if err := dec.FinishValue(); err != nil {
+ return err
+ }
+ default:
+ if err := dec.SkipValue(); err != nil {
+ return err
+ }
+ }
+ }
+}
+
var __VDLInitCalled bool
// __VDLInit performs vdl initialization. It is safe to call multiple times.