TBR v23proxy: support FromZero.
MultiPart: 6/6
Change-Id: I4afbf386f27465d74ce4417f87b8844979feef65
diff --git a/go/src/v.io/x/mojo/proxy/util/util_test.go b/go/src/v.io/x/mojo/proxy/util/util_test.go
index 7375b6d..143f7d8 100644
--- a/go/src/v.io/x/mojo/proxy/util/util_test.go
+++ b/go/src/v.io/x/mojo/proxy/util/util_test.go
@@ -5,12 +5,12 @@
package util_test
import (
- "testing"
"reflect"
+ "testing"
+ "v.io/v23/vdl"
"v.io/v23/vom"
"v.io/x/mojo/proxy/util"
- "v.io/v23/vdl"
)
type TestStructA struct {
@@ -66,4 +66,4 @@
if got, want := out, expectedRaw; !reflect.DeepEqual(got, want) {
t.Errorf("got %v, want %v", got, want)
}
-}
\ No newline at end of file
+}
diff --git a/go/src/v.io/x/mojo/tests/client/test_client.go b/go/src/v.io/x/mojo/tests/client/test_client.go
index 64bff14..7841083 100644
--- a/go/src/v.io/x/mojo/tests/client/test_client.go
+++ b/go/src/v.io/x/mojo/tests/client/test_client.go
@@ -28,7 +28,7 @@
import "C"
var (
- mojoFlag *flag.FlagSet
+ mojoFlag *flag.FlagSet
endpointFlag *string
)
diff --git a/go/src/v.io/x/mojo/transcoder/from_mojom.go b/go/src/v.io/x/mojo/transcoder/from_mojom.go
index 85df7b5..7ee6faf 100644
--- a/go/src/v.io/x/mojo/transcoder/from_mojom.go
+++ b/go/src/v.io/x/mojo/transcoder/from_mojom.go
@@ -27,7 +27,7 @@
return FromMojo(target, data, datatype)
}
-func FromMojo(target vdl.Target, data []byte, datatype *vdl.Type) error {
+func FromMojo(target vdl.Target, data []byte, datatype *vdl.Type) error {
mtv := &mojomToTargetTranscoder{modec: bindings.NewDecoder(data, nil)}
return mtv.transcodeValue(datatype, target, true, false)
}
@@ -134,7 +134,7 @@
case err != nil:
return err
case ptr == 0 && isNullable:
- return target.FromNil(vdl.OptionalType(vt))
+ return target.FromZero(vdl.OptionalType(vt))
case ptr == 0 && !isNullable:
return fmt.Errorf("invalid null struct pointer")
}
@@ -212,7 +212,7 @@
case err != nil:
return err
case ptr == 0 && isNullable:
- return target.FromNil(vdl.OptionalType(vt))
+ return target.FromZero(vdl.OptionalType(vt))
case ptr == 0 && !isNullable:
return fmt.Errorf("invalid null struct pointer")
}
@@ -278,7 +278,7 @@
case err != nil:
return err
case ptr == 0 && isNullable:
- return target.FromNil(vdl.OptionalType(vt))
+ return target.FromZero(vdl.OptionalType(vt))
case ptr == 0 && !isNullable:
return fmt.Errorf("invalid null struct pointer")
}
@@ -318,7 +318,7 @@
}
if size == 0 {
mtv.modec.SkipUnionValue()
- return target.FromNil(vdl.OptionalType(vt))
+ return target.FromZero(vdl.OptionalType(vt))
}
if int(tag) >= vt.NumField() {
return fmt.Errorf("union tag out of bounds")
@@ -337,7 +337,7 @@
case err != nil:
return err
case ptr == 0 && isNullable:
- return target.FromNil(vdl.OptionalType(fld.Type))
+ return target.FromZero(vdl.OptionalType(fld.Type))
case ptr == 0 && !isNullable:
return fmt.Errorf("invalid null union pointer")
}
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 79e1592..76b2812 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
@@ -34,55 +34,86 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("Street")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromString(string(m.Street), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.Street == "")
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromString(string(m.Street), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
}
}
- keyTarget4, fieldTarget5, err := fieldsTarget1.StartField("City")
+ keyTarget5, fieldTarget6, err := fieldsTarget1.StartField("City")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget5.FromString(string(m.City), tt.NonOptional().Field(1).Type); err != nil {
- return err
+
+ var7 := (m.City == "")
+ if var7 {
+ if err := fieldTarget6.FromZero(tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget6.FromString(string(m.City), tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
}
- if err := fieldsTarget1.FinishField(keyTarget4, fieldTarget5); err != nil {
+ if err := fieldsTarget1.FinishField(keyTarget5, fieldTarget6); err != nil {
return err
}
}
- keyTarget6, fieldTarget7, err := fieldsTarget1.StartField("State")
+ keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("State")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget7.FromString(string(m.State), tt.NonOptional().Field(2).Type); err != nil {
- return err
- }
- if err := fieldsTarget1.FinishField(keyTarget6, fieldTarget7); err != nil {
- return err
- }
- }
- keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("Zip")
- if err != vdl.ErrFieldNoExist && err != nil {
- return err
- }
- if err != vdl.ErrFieldNoExist {
- if err := fieldTarget9.FromString(string(m.Zip), tt.NonOptional().Field(3).Type); err != nil {
- return err
+
+ var10 := (m.State == "")
+ if var10 {
+ if err := fieldTarget9.FromZero(tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget9.FromString(string(m.State), tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget8, fieldTarget9); err != nil {
return err
}
}
+ keyTarget11, fieldTarget12, err := fieldsTarget1.StartField("Zip")
+ if err != vdl.ErrFieldNoExist && err != nil {
+ return err
+ }
+ if err != vdl.ErrFieldNoExist {
+
+ var13 := (m.Zip == "")
+ if var13 {
+ if err := fieldTarget12.FromZero(tt.NonOptional().Field(3).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget12.FromString(string(m.Zip), tt.NonOptional().Field(3).Type); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget11, fieldTarget12); err != nil {
+ return err
+ }
+ }
if err := t.FinishFields(fieldsTarget1); err != nil {
return err
}
@@ -139,6 +170,10 @@
return nil
}
+func (t *AddressInfoTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = AddressInfo{}
+ return nil
+}
type CreditAgency int
@@ -222,11 +257,15 @@
case "TransUnion":
*t.Value = 2
default:
- return fmt.Errorf("label %s not in enum src/v.io/x/mojo/transcoder/internal.CreditAgency", src)
+ return fmt.Errorf("label %s not in enum CreditAgencyEquifax", src)
}
return nil
}
+func (t *CreditAgencyTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = CreditAgencyEquifax
+ return nil
+}
type ExperianRating int
@@ -302,11 +341,15 @@
case "Bad":
*t.Value = 1
default:
- return fmt.Errorf("label %s not in enum src/v.io/x/mojo/transcoder/internal.ExperianRating", src)
+ return fmt.Errorf("label %s not in enum ExperianRatingGood", src)
}
return nil
}
+func (t *ExperianRatingTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = ExperianRatingGood
+ return nil
+}
type EquifaxCreditReport struct {
Rating byte
@@ -322,14 +365,21 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("Rating")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromUint(uint64(m.Rating), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.Rating == byte(0))
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromUint(uint64(m.Rating), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
@@ -376,6 +426,10 @@
return nil
}
+func (t *EquifaxCreditReportTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = EquifaxCreditReport{}
+ return nil
+}
type ExperianCreditReport struct {
Rating ExperianRating
@@ -391,15 +445,22 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("Rating")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := m.Rating.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
- return err
+ var4 := (m.Rating == ExperianRatingGood)
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+
+ if err := m.Rating.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
@@ -446,6 +507,10 @@
return nil
}
+func (t *ExperianCreditReportTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = ExperianCreditReport{}
+ return nil
+}
type TransUnionCreditReport struct {
Rating int16
@@ -461,14 +526,21 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("Rating")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromInt(int64(m.Rating), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.Rating == int16(0))
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromInt(int64(m.Rating), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
@@ -515,6 +587,10 @@
return nil
}
+func (t *TransUnionCreditReportTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = TransUnionCreditReport{}
+ return nil
+}
type (
// AgencyReport represents any single field of the AgencyReport union type.
@@ -690,6 +766,10 @@
return nil
}
+func (t *AgencyReportTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = AgencyReport(AgencyReportEquifaxReport{})
+ return nil
+}
type agencyReportTargetFactory struct{}
@@ -715,34 +795,54 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("Agency")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := m.Agency.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
- return err
+ var4 := (m.Agency == CreditAgencyEquifax)
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+
+ if err := m.Agency.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
}
}
- keyTarget4, fieldTarget5, err := fieldsTarget1.StartField("Report")
+ keyTarget5, fieldTarget6, err := fieldsTarget1.StartField("Report")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- unionValue6 := m.Report
- if unionValue6 == nil {
- unionValue6 = AgencyReportEquifaxReport{}
+ var var7 bool
+ if field, ok := m.Report.(AgencyReportEquifaxReport); ok {
+
+ var8 := (field.Value == EquifaxCreditReport{})
+ var7 = var8
}
- if err := unionValue6.FillVDLTarget(fieldTarget5, tt.NonOptional().Field(1).Type); err != nil {
- return err
+ if var7 {
+ if err := fieldTarget6.FromZero(tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
+ } else {
+
+ unionValue9 := m.Report
+ if unionValue9 == nil {
+ unionValue9 = AgencyReportEquifaxReport{}
+ }
+ if err := unionValue9.FillVDLTarget(fieldTarget6, tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
}
- if err := fieldsTarget1.FinishField(keyTarget4, fieldTarget5); err != nil {
+ if err := fieldsTarget1.FinishField(keyTarget5, fieldTarget6); err != nil {
return err
}
}
@@ -792,6 +892,12 @@
return nil
}
+func (t *CreditReportTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = CreditReport{
+ Report: AgencyReportEquifaxReport{},
+ }
+ return nil
+}
type Customer struct {
Name string
@@ -811,66 +917,107 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("Name")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromString(string(m.Name), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.Name == "")
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromString(string(m.Name), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
}
}
- keyTarget4, fieldTarget5, err := fieldsTarget1.StartField("Id")
- if err != vdl.ErrFieldNoExist && err != nil {
- return err
- }
- if err != vdl.ErrFieldNoExist {
- if err := fieldTarget5.FromInt(int64(m.Id), tt.NonOptional().Field(1).Type); err != nil {
- return err
- }
- if err := fieldsTarget1.FinishField(keyTarget4, fieldTarget5); err != nil {
- return err
- }
- }
- keyTarget6, fieldTarget7, err := fieldsTarget1.StartField("Active")
- if err != vdl.ErrFieldNoExist && err != nil {
- return err
- }
- if err != vdl.ErrFieldNoExist {
- if err := fieldTarget7.FromBool(bool(m.Active), tt.NonOptional().Field(2).Type); err != nil {
- return err
- }
- if err := fieldsTarget1.FinishField(keyTarget6, fieldTarget7); err != nil {
- return err
- }
- }
- keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("Address")
+ keyTarget5, fieldTarget6, err := fieldsTarget1.StartField("Id")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := m.Address.FillVDLTarget(fieldTarget9, tt.NonOptional().Field(3).Type); err != nil {
+ var7 := (m.Id == int64(0))
+ if var7 {
+ if err := fieldTarget6.FromZero(tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget6.FromInt(int64(m.Id), tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget5, fieldTarget6); err != nil {
return err
}
+ }
+ keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("Active")
+ if err != vdl.ErrFieldNoExist && err != nil {
+ return err
+ }
+ if err != vdl.ErrFieldNoExist {
+
+ var10 := (m.Active == false)
+ if var10 {
+ if err := fieldTarget9.FromZero(tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget9.FromBool(bool(m.Active), tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
+ }
if err := fieldsTarget1.FinishField(keyTarget8, fieldTarget9); err != nil {
return err
}
}
- keyTarget10, fieldTarget11, err := fieldsTarget1.StartField("Credit")
+ keyTarget11, fieldTarget12, err := fieldsTarget1.StartField("Address")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := m.Credit.FillVDLTarget(fieldTarget11, tt.NonOptional().Field(4).Type); err != nil {
+ var13 := (m.Address == AddressInfo{})
+ if var13 {
+ if err := fieldTarget12.FromZero(tt.NonOptional().Field(3).Type); err != nil {
+ return err
+ }
+ } else {
+
+ if err := m.Address.FillVDLTarget(fieldTarget12, tt.NonOptional().Field(3).Type); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget11, fieldTarget12); err != nil {
return err
}
- if err := fieldsTarget1.FinishField(keyTarget10, fieldTarget11); err != nil {
+ }
+ keyTarget14, fieldTarget15, err := fieldsTarget1.StartField("Credit")
+ if err != vdl.ErrFieldNoExist && err != nil {
+ return err
+ }
+ if err != vdl.ErrFieldNoExist {
+
+ var16 := (m.Credit == CreditReport{
+ Report: AgencyReportEquifaxReport{},
+ })
+ if var16 {
+ if err := fieldTarget15.FromZero(tt.NonOptional().Field(4).Type); err != nil {
+ return err
+ }
+ } else {
+
+ if err := m.Credit.FillVDLTarget(fieldTarget15, tt.NonOptional().Field(4).Type); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget14, fieldTarget15); err != nil {
return err
}
}
@@ -935,25 +1082,14 @@
return nil
}
-
-// Create zero values for each type.
-var (
- __VDLZeroAddressInfo = AddressInfo{}
- __VDLZeroCreditAgency = CreditAgencyEquifax
- __VDLZeroExperianRating = ExperianRatingGood
- __VDLZeroEquifaxCreditReport = EquifaxCreditReport{}
- __VDLZeroExperianCreditReport = ExperianCreditReport{}
- __VDLZeroTransUnionCreditReport = TransUnionCreditReport{}
- __VDLZeroAgencyReport = AgencyReport(AgencyReportEquifaxReport{})
- __VDLZeroCreditReport = CreditReport{
- Report: AgencyReportEquifaxReport{},
- }
- __VDLZeroCustomer = Customer{
+func (t *CustomerTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = Customer{
Credit: CreditReport{
Report: AgencyReportEquifaxReport{},
},
}
-)
+ return nil
+}
var __VDLInitCalled bool
@@ -974,6 +1110,7 @@
if __VDLInitCalled {
return struct{}{}
}
+ __VDLInitCalled = true
// Register types.
vdl.Register((*AddressInfo)(nil))
diff --git a/go/src/v.io/x/mojo/transcoder/target.go b/go/src/v.io/x/mojo/transcoder/target.go
index 162704e..1d45b19 100644
--- a/go/src/v.io/x/mojo/transcoder/target.go
+++ b/go/src/v.io/x/mojo/transcoder/target.go
@@ -93,7 +93,10 @@
panic("UNIMPLEMENTED")
}
-func (t target) FromNil(tt *vdl.Type) error {
+func (t target) FromZero(tt *vdl.Type) error {
+ if tt.IsBytes() {
+ return t.FromBytes(nil, tt)
+ }
switch tt.Kind() {
case vdl.Optional:
elemType := tt.Elem()
@@ -106,8 +109,94 @@
}
case vdl.Any:
panic("Any rep not yet determined")
+ case vdl.Bool:
+ return t.FromBool(false, tt)
+ case vdl.Byte, vdl.Uint16, vdl.Uint32, vdl.Uint64:
+ return t.FromUint(0, tt)
+ case vdl.Int8, vdl.Int16, vdl.Int32, vdl.Int64:
+ return t.FromInt(0, tt)
+ case vdl.Float32, vdl.Float64:
+ return t.FromFloat(0, tt)
+ case vdl.String:
+ return t.FromString("", tt)
+ case vdl.Enum:
+ return t.FromEnumLabel(tt.EnumLabel(0), tt)
+ case vdl.TypeObject:
+ return t.FromTypeObject(vdl.AnyType)
+ case vdl.List:
+ lt, err := t.StartList(tt, 0)
+ if err != nil {
+ return err
+ }
+ return t.FinishList(lt)
+ case vdl.Array:
+ lt, err := t.StartList(tt, tt.Len())
+ if err != nil {
+ return err
+ }
+ for i := 0; i < tt.Len(); i++ {
+ targ, err := lt.StartElem(i)
+ if err != nil {
+ return err
+ }
+ if err := targ.FromZero(tt.Elem()); err != nil {
+ return err
+ }
+ if err := lt.FinishElem(targ); err != nil {
+ return err
+ }
+ }
+ return t.FinishList(lt)
+ case vdl.Map:
+ mt, err := t.StartMap(tt, 0)
+ if err != nil {
+ return err
+ }
+ return t.FinishMap(mt)
+ case vdl.Set:
+ st, err := t.StartSet(tt, 0)
+ if err != nil {
+ return err
+ }
+ return t.FinishSet(st)
+ case vdl.Struct:
+ st, err := t.StartFields(tt)
+ if err != nil {
+ return err
+ }
+ for i := 0; i < tt.NumField(); i++ {
+ fld := tt.Field(i)
+ kt, ft, err := st.StartField(fld.Name)
+ if err != nil {
+ return err
+ }
+ if err := ft.FromZero(fld.Type); err != nil {
+ return err
+ }
+ if err := st.FinishField(kt, ft); err != nil {
+ return err
+ }
+ }
+ return t.FinishFields(st)
+ case vdl.Union:
+ st, err := t.StartFields(tt)
+ if err != nil {
+ return err
+ }
+ fld := tt.Field(0)
+ kt, ft, err := st.StartField(fld.Name)
+ if err != nil {
+ return err
+ }
+ if err := ft.FromZero(fld.Type); err != nil {
+ return err
+ }
+ if err := st.FinishField(kt, ft); err != nil {
+ return err
+ }
+ return t.FinishFields(st)
default:
- panic("Type cannot be nil")
+ panic(fmt.Sprintf("unknown type %v", tt))
}
return nil
}
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 cc35d3f..b74ab04 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
@@ -91,11 +91,15 @@
case "Second":
*t.Value = 1
default:
- return fmt.Errorf("label %s not in enum src/v.io/x/mojo/transcoder/testtypes.AnEnum", src)
+ return fmt.Errorf("label %s not in enum AnEnumFirst", src)
}
return nil
}
+func (t *AnEnumTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = AnEnumFirst
+ return nil
+}
type (
// PodUnion represents any single field of the PodUnion union type.
@@ -659,6 +663,10 @@
return nil
}
+func (t *PodUnionTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = PodUnion(PodUnionFInt8{})
+ return nil
+}
type podUnionTargetFactory struct{}
@@ -683,19 +691,31 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("PodUnion")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- unionValue4 := m.PodUnion
- if unionValue4 == nil {
- unionValue4 = PodUnionFInt8{}
+ var var4 bool
+ if field, ok := m.PodUnion.(PodUnionFInt8); ok {
+
+ var5 := (field.Value == int8(0))
+ var4 = var5
}
- if err := unionValue4.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
- return err
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+
+ unionValue6 := m.PodUnion
+ if unionValue6 == nil {
+ unionValue6 = PodUnionFInt8{}
+ }
+ if err := unionValue6.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
@@ -742,6 +762,12 @@
return nil
}
+func (t *PodUnionWrapperTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = PodUnionWrapper{
+ PodUnion: PodUnionFInt8{},
+ }
+ return nil
+}
type DummyStruct struct {
FInt8 int8
@@ -757,14 +783,21 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("FInt8")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromInt(int64(m.FInt8), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.FInt8 == int8(0))
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromInt(int64(m.FInt8), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
@@ -811,6 +844,10 @@
return nil
}
+func (t *DummyStructTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = DummyStruct{}
+ return nil
+}
type (
// ObjectUnion represents any single field of the ObjectUnion union type.
@@ -965,14 +1002,8 @@
return err
}
- if m.Value == nil {
- if err := fieldTarget3.FromNil(tt.NonOptional().Field(3).Type); err != nil {
- return err
- }
- } else {
- if err := m.Value.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(3).Type); err != nil {
- return err
- }
+ if err := m.Value.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(3).Type); err != nil {
+ return err
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
@@ -1193,6 +1224,10 @@
return nil
}
+func (t *ObjectUnionTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = ObjectUnion(ObjectUnionFInt8{})
+ return nil
+}
type objectUnionTargetFactory struct{}
@@ -1227,10 +1262,8 @@
return nil
}
-func (t *__VDLTarget1_optional) FromNil(tt *vdl.Type) error {
-
- *t.Value = nil
-
+func (t *__VDLTarget1_optional) FromZero(tt *vdl.Type) error {
+ *t.Value = (*DummyStruct)(nil)
return nil
}
@@ -1266,6 +1299,10 @@
return nil
}
+func (t *__VDLTarget2_list) FromZero(tt *vdl.Type) error {
+ *t.Value = []int8(nil)
+ return nil
+}
// map[string]int8
type __VDLTarget3_map struct {
@@ -1309,6 +1346,10 @@
return nil
}
+func (t *__VDLTarget3_map) FromZero(tt *vdl.Type) error {
+ *t.Value = map[string]int8(nil)
+ return nil
+}
type ObjectUnionWrapper struct {
ObjectUnion ObjectUnion
@@ -1324,19 +1365,31 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("ObjectUnion")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- unionValue4 := m.ObjectUnion
- if unionValue4 == nil {
- unionValue4 = ObjectUnionFInt8{}
+ var var4 bool
+ if field, ok := m.ObjectUnion.(ObjectUnionFInt8); ok {
+
+ var5 := (field.Value == int8(0))
+ var4 = var5
}
- if err := unionValue4.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
- return err
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+
+ unionValue6 := m.ObjectUnion
+ if unionValue6 == nil {
+ unionValue6 = ObjectUnionFInt8{}
+ }
+ if err := unionValue6.FillVDLTarget(fieldTarget3, tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
@@ -1383,6 +1436,12 @@
return nil
}
+func (t *ObjectUnionWrapperTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = ObjectUnionWrapper{
+ ObjectUnion: ObjectUnionFInt8{},
+ }
+ return nil
+}
type Rect struct {
X int32
@@ -1401,55 +1460,86 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("X")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromInt(int64(m.X), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.X == int32(0))
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromInt(int64(m.X), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
}
}
- keyTarget4, fieldTarget5, err := fieldsTarget1.StartField("Y")
+ keyTarget5, fieldTarget6, err := fieldsTarget1.StartField("Y")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget5.FromInt(int64(m.Y), tt.NonOptional().Field(1).Type); err != nil {
- return err
+
+ var7 := (m.Y == int32(0))
+ if var7 {
+ if err := fieldTarget6.FromZero(tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget6.FromInt(int64(m.Y), tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
}
- if err := fieldsTarget1.FinishField(keyTarget4, fieldTarget5); err != nil {
+ if err := fieldsTarget1.FinishField(keyTarget5, fieldTarget6); err != nil {
return err
}
}
- keyTarget6, fieldTarget7, err := fieldsTarget1.StartField("Width")
+ keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("Width")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget7.FromInt(int64(m.Width), tt.NonOptional().Field(2).Type); err != nil {
- return err
- }
- if err := fieldsTarget1.FinishField(keyTarget6, fieldTarget7); err != nil {
- return err
- }
- }
- keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("Height")
- if err != vdl.ErrFieldNoExist && err != nil {
- return err
- }
- if err != vdl.ErrFieldNoExist {
- if err := fieldTarget9.FromInt(int64(m.Height), tt.NonOptional().Field(3).Type); err != nil {
- return err
+
+ var10 := (m.Width == int32(0))
+ if var10 {
+ if err := fieldTarget9.FromZero(tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget9.FromInt(int64(m.Width), tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget8, fieldTarget9); err != nil {
return err
}
}
+ keyTarget11, fieldTarget12, err := fieldsTarget1.StartField("Height")
+ if err != vdl.ErrFieldNoExist && err != nil {
+ return err
+ }
+ if err != vdl.ErrFieldNoExist {
+
+ var13 := (m.Height == int32(0))
+ if var13 {
+ if err := fieldTarget12.FromZero(tt.NonOptional().Field(3).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget12.FromInt(int64(m.Height), tt.NonOptional().Field(3).Type); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget11, fieldTarget12); err != nil {
+ return err
+ }
+ }
if err := t.FinishFields(fieldsTarget1); err != nil {
return err
}
@@ -1506,6 +1596,10 @@
return nil
}
+func (t *RectTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = Rect{}
+ return nil
+}
type MultiVersionStruct struct {
FInt32 int32
@@ -1526,94 +1620,144 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("FInt32")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromInt(int64(m.FInt32), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.FInt32 == int32(0))
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromInt(int64(m.FInt32), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
}
}
- keyTarget4, fieldTarget5, err := fieldsTarget1.StartField("FRect")
+ keyTarget5, fieldTarget6, err := fieldsTarget1.StartField("FRect")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := m.FRect.FillVDLTarget(fieldTarget5, tt.NonOptional().Field(1).Type); err != nil {
- return err
+ var7 := (m.FRect == Rect{})
+ if var7 {
+ if err := fieldTarget6.FromZero(tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
+ } else {
+
+ if err := m.FRect.FillVDLTarget(fieldTarget6, tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
}
- if err := fieldsTarget1.FinishField(keyTarget4, fieldTarget5); err != nil {
+ if err := fieldsTarget1.FinishField(keyTarget5, fieldTarget6); err != nil {
return err
}
}
- keyTarget6, fieldTarget7, err := fieldsTarget1.StartField("FString")
- if err != vdl.ErrFieldNoExist && err != nil {
- return err
- }
- if err != vdl.ErrFieldNoExist {
- if err := fieldTarget7.FromString(string(m.FString), tt.NonOptional().Field(2).Type); err != nil {
- return err
- }
- if err := fieldsTarget1.FinishField(keyTarget6, fieldTarget7); err != nil {
- return err
- }
- }
- keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("FArray")
+ keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("FString")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- listTarget10, err := fieldTarget9.StartList(tt.NonOptional().Field(3).Type, len(m.FArray))
- if err != nil {
- return err
- }
- for i, elem12 := range m.FArray {
- elemTarget11, err := listTarget10.StartElem(i)
- if err != nil {
+ var10 := (m.FString == "")
+ if var10 {
+ if err := fieldTarget9.FromZero(tt.NonOptional().Field(2).Type); err != nil {
return err
}
- if err := elemTarget11.FromInt(int64(elem12), tt.NonOptional().Field(3).Type.Elem()); err != nil {
+ } else {
+ if err := fieldTarget9.FromString(string(m.FString), tt.NonOptional().Field(2).Type); err != nil {
return err
}
- if err := listTarget10.FinishElem(elemTarget11); err != nil {
- return err
- }
- }
- if err := fieldTarget9.FinishList(listTarget10); err != nil {
- return err
}
if err := fieldsTarget1.FinishField(keyTarget8, fieldTarget9); err != nil {
return err
}
}
- keyTarget13, fieldTarget14, err := fieldsTarget1.StartField("FBool")
+ keyTarget11, fieldTarget12, err := fieldsTarget1.StartField("FArray")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget14.FromBool(bool(m.FBool), tt.NonOptional().Field(4).Type); err != nil {
- return err
+
+ var var13 bool
+ if len(m.FArray) == 0 {
+ var13 = true
}
- if err := fieldsTarget1.FinishField(keyTarget13, fieldTarget14); err != nil {
+ if var13 {
+ if err := fieldTarget12.FromZero(tt.NonOptional().Field(3).Type); err != nil {
+ return err
+ }
+ } else {
+
+ listTarget14, err := fieldTarget12.StartList(tt.NonOptional().Field(3).Type, len(m.FArray))
+ if err != nil {
+ return err
+ }
+ for i, elem16 := range m.FArray {
+ elemTarget15, err := listTarget14.StartElem(i)
+ if err != nil {
+ return err
+ }
+ if err := elemTarget15.FromInt(int64(elem16), tt.NonOptional().Field(3).Type.Elem()); err != nil {
+ return err
+ }
+ if err := listTarget14.FinishElem(elemTarget15); err != nil {
+ return err
+ }
+ }
+ if err := fieldTarget12.FinishList(listTarget14); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget11, fieldTarget12); err != nil {
return err
}
}
- keyTarget15, fieldTarget16, err := fieldsTarget1.StartField("FInt16")
+ keyTarget17, fieldTarget18, err := fieldsTarget1.StartField("FBool")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget16.FromInt(int64(m.FInt16), tt.NonOptional().Field(5).Type); err != nil {
+
+ var19 := (m.FBool == false)
+ if var19 {
+ if err := fieldTarget18.FromZero(tt.NonOptional().Field(4).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget18.FromBool(bool(m.FBool), tt.NonOptional().Field(4).Type); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget17, fieldTarget18); err != nil {
return err
}
- if err := fieldsTarget1.FinishField(keyTarget15, fieldTarget16); err != nil {
+ }
+ keyTarget20, fieldTarget21, err := fieldsTarget1.StartField("FInt16")
+ if err != vdl.ErrFieldNoExist && err != nil {
+ return err
+ }
+ if err != vdl.ErrFieldNoExist {
+
+ var22 := (m.FInt16 == int16(0))
+ if var22 {
+ if err := fieldTarget21.FromZero(tt.NonOptional().Field(5).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget21.FromInt(int64(m.FInt16), tt.NonOptional().Field(5).Type); err != nil {
+ return err
+ }
+ }
+ if err := fieldsTarget1.FinishField(keyTarget20, fieldTarget21); err != nil {
return err
}
}
@@ -1683,6 +1827,10 @@
return nil
}
+func (t *MultiVersionStructTarget) FromZero(tt *vdl.Type) error {
+ *t.Value = MultiVersionStruct{}
+ return nil
+}
type MultiVersionStructV3 struct {
FInt32 int32
@@ -1700,41 +1848,64 @@
if err != nil {
return err
}
-
keyTarget2, fieldTarget3, err := fieldsTarget1.StartField("FInt32")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget3.FromInt(int64(m.FInt32), tt.NonOptional().Field(0).Type); err != nil {
- return err
+
+ var4 := (m.FInt32 == int32(0))
+ if var4 {
+ if err := fieldTarget3.FromZero(tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget3.FromInt(int64(m.FInt32), tt.NonOptional().Field(0).Type); err != nil {
+ return err
+ }
}
if err := fieldsTarget1.FinishField(keyTarget2, fieldTarget3); err != nil {
return err
}
}
- keyTarget4, fieldTarget5, err := fieldsTarget1.StartField("FRect")
+ keyTarget5, fieldTarget6, err := fieldsTarget1.StartField("FRect")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := m.FRect.FillVDLTarget(fieldTarget5, tt.NonOptional().Field(1).Type); err != nil {
- return err
+ var7 := (m.FRect == Rect{})
+ if var7 {
+ if err := fieldTarget6.FromZero(tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
+ } else {
+
+ if err := m.FRect.FillVDLTarget(fieldTarget6, tt.NonOptional().Field(1).Type); err != nil {
+ return err
+ }
}
- if err := fieldsTarget1.FinishField(keyTarget4, fieldTarget5); err != nil {
+ if err := fieldsTarget1.FinishField(keyTarget5, fieldTarget6); err != nil {
return err
}
}
- keyTarget6, fieldTarget7, err := fieldsTarget1.StartField("FString")
+ keyTarget8, fieldTarget9, err := fieldsTarget1.StartField("FString")
if err != vdl.ErrFieldNoExist && err != nil {
return err
}
if err != vdl.ErrFieldNoExist {
- if err := fieldTarget7.FromString(string(m.FString), tt.NonOptional().Field(2).Type); err != nil {
- return err
+
+ var10 := (m.FString == "")
+ if var10 {
+ if err := fieldTarget9.FromZero(tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
+ } else {
+ if err := fieldTarget9.FromString(string(m.FString), tt.NonOptional().Field(2).Type); err != nil {
+ return err
+ }
}
- if err := fieldsTarget1.FinishField(keyTarget6, fieldTarget7); err != nil {
+ if err := fieldsTarget1.FinishField(keyTarget8, fieldTarget9); err != nil {
return err
}
}
@@ -1789,23 +1960,10 @@
return nil
}
-
-// Create zero values for each type.
-var (
- __VDLZeroAnEnum = AnEnumFirst
- __VDLZeroPodUnion = PodUnion(PodUnionFInt8{})
- __VDLZeroPodUnionWrapper = PodUnionWrapper{
- PodUnion: PodUnionFInt8{},
- }
- __VDLZeroDummyStruct = DummyStruct{}
- __VDLZeroObjectUnion = ObjectUnion(ObjectUnionFInt8{})
- __VDLZeroObjectUnionWrapper = ObjectUnionWrapper{
- ObjectUnion: ObjectUnionFInt8{},
- }
- __VDLZeroRect = Rect{}
- __VDLZeroMultiVersionStruct = MultiVersionStruct{}
- __VDLZeroMultiVersionStructV3 = MultiVersionStructV3{}
-)
+func (t *MultiVersionStructV3Target) FromZero(tt *vdl.Type) error {
+ *t.Value = MultiVersionStructV3{}
+ return nil
+}
var __VDLInitCalled bool
@@ -1826,6 +1984,7 @@
if __VDLInitCalled {
return struct{}{}
}
+ __VDLInitCalled = true
// Register types.
vdl.Register((*AnEnum)(nil))
diff --git a/go/src/v.io/x/mojo/transcoder/to_mojom.go b/go/src/v.io/x/mojo/transcoder/to_mojom.go
index 21ea9d5..73196de 100644
--- a/go/src/v.io/x/mojo/transcoder/to_mojom.go
+++ b/go/src/v.io/x/mojo/transcoder/to_mojom.go
@@ -59,8 +59,28 @@
func (vtm *targetToMojomTranscoder) FromTypeObject(src *vdl.Type) error {
panic("cannot encode top level type object")
}
-func (vtm *targetToMojomTranscoder) FromNil(tt *vdl.Type) error {
- panic("cannot encode top level nil")
+func (vtm *targetToMojomTranscoder) FromZero(tt *vdl.Type) error {
+ if tt.Kind() == vdl.Struct {
+ st, err := vtm.StartFields(tt)
+ if err != nil {
+ return err
+ }
+ for i := 0; i < tt.NumField(); i++ {
+ fld := tt.Field(i)
+ kt, ft, err := st.StartField(fld.Name)
+ if err != nil {
+ return err
+ }
+ if err := ft.FromZero(fld.Type); err != nil {
+ return err
+ }
+ if err := st.FinishField(kt, ft); err != nil {
+ return err
+ }
+ }
+ return vtm.FinishFields(st)
+ }
+ panic("UNIMPLEMENTED")
}
func (vtm *targetToMojomTranscoder) StartList(tt *vdl.Type, len int) (vdl.ListTarget, error) {