NomDL Codegen: Add optional flag to Field

This commit is contained in:
Erik Arvidsson
2015-09-25 14:14:30 -04:00
parent b53b4b74c2
commit 5b3f611104
17 changed files with 116 additions and 54 deletions
+2 -2
View File
@@ -497,8 +497,8 @@ func (self Pitch) Def() PitchDef {
func __typeRefOfPitch() types.TypeRef {
return types.MakeStructTypeRef("Pitch",
[]types.Field{
types.Field{"X", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"Z", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"X", types.MakePrimitiveTypeRef(types.Float64Kind), false},
types.Field{"Z", types.MakePrimitiveTypeRef(types.Float64Kind), false},
},
nil)
+61
View File
@@ -69,6 +69,14 @@ func (s RemotePhoto) SetTags(p SetOfString) RemotePhoto {
return RemotePhotoFromVal(s.m.Set(types.NewString("tags"), p.NomsValue()))
}
func (s RemotePhoto) Geoposition() Geoposition {
return GeopositionFromVal(s.m.Get(types.NewString("geoposition")))
}
func (s RemotePhoto) SetGeoposition(p Geoposition) RemotePhoto {
return RemotePhotoFromVal(s.m.Set(types.NewString("geoposition"), p.NomsValue()))
}
func (s RemotePhoto) Url() types.String {
return types.StringFromVal(s.m.Get(types.NewString("url")))
}
@@ -228,6 +236,14 @@ func (s Photo) SetHeight(p types.UInt32) Photo {
return PhotoFromVal(s.m.Set(types.NewString("height"), p))
}
func (s Photo) Geoposition() Geoposition {
return GeopositionFromVal(s.m.Get(types.NewString("geoposition")))
}
func (s Photo) SetGeoposition(p Geoposition) Photo {
return PhotoFromVal(s.m.Set(types.NewString("geoposition"), p.NomsValue()))
}
func (s Photo) Image() types.Blob {
return types.BlobFromVal(s.m.Get(types.NewString("image")))
}
@@ -244,6 +260,51 @@ func (s Photo) SetUrl(p types.String) Photo {
return PhotoFromVal(s.m.Set(types.NewString("url"), p))
}
// Geoposition
type Geoposition struct {
m types.Map
}
func NewGeoposition() Geoposition {
return Geoposition{
types.NewMap(types.NewString("$name"), types.NewString("Geoposition")),
}
}
func GeopositionFromVal(v types.Value) Geoposition {
return Geoposition{v.(types.Map)}
}
// TODO: This was going to be called Value() but it collides with root.value. We need some other place to put the built-in fields like Value() and Equals().
func (s Geoposition) NomsValue() types.Map {
return s.m
}
func (s Geoposition) Equals(p Geoposition) bool {
return s.m.Equals(p.m)
}
func (s Geoposition) Ref() ref.Ref {
return s.m.Ref()
}
func (s Geoposition) Longitude() types.Float32 {
return types.Float32FromVal(s.m.Get(types.NewString("longitude")))
}
func (s Geoposition) SetLongitude(p types.Float32) Geoposition {
return GeopositionFromVal(s.m.Set(types.NewString("longitude"), p))
}
func (s Geoposition) Latitude() types.Float32 {
return types.Float32FromVal(s.m.Get(types.NewString("latitude")))
}
func (s Geoposition) SetLatitude(p types.Float32) Geoposition {
return GeopositionFromVal(s.m.Set(types.NewString("latitude"), p))
}
// MapOfSizeToString
type MapOfSizeToString struct {
+2 -2
View File
@@ -41,8 +41,8 @@ func NewCommit() Commit {
func __typeRefOfCommit() types.TypeRef {
return types.MakeStructTypeRef("Commit",
[]types.Field{
types.Field{"value", types.MakePrimitiveTypeRef(types.ValueKind)},
types.Field{"parents", types.MakeCompoundTypeRef("", types.SetKind, types.MakeTypeRef("Commit", types.Ref{}))},
types.Field{"value", types.MakePrimitiveTypeRef(types.ValueKind), false},
types.Field{"parents", types.MakeCompoundTypeRef("", types.SetKind, types.MakeTypeRef("Commit", types.Ref{})), false},
},
nil)
+2 -2
View File
@@ -186,8 +186,8 @@ func (self Dataset) Def() DatasetDef {
func __typeRefOfDataset() types.TypeRef {
return types.MakeStructTypeRef("Dataset",
[]types.Field{
types.Field{"id", types.MakePrimitiveTypeRef(types.StringKind)},
types.Field{"head", types.MakePrimitiveTypeRef(types.ValueKind)},
types.Field{"id", types.MakePrimitiveTypeRef(types.StringKind), false},
types.Field{"head", types.MakePrimitiveTypeRef(types.ValueKind), false},
},
nil)
+1 -1
View File
@@ -438,7 +438,7 @@ func (gen *codeGen) toTypesTypeRef(t parse.TypeRef) string {
flatten := func(f []parse.Field) string {
out := make([]string, 0, len(f))
for _, field := range f {
out = append(out, fmt.Sprintf(`types.Field{"%s", %s},`, field.Name, gen.toTypesTypeRef(field.T)))
out = append(out, fmt.Sprintf(`types.Field{"%s", %s, %t},`, field.Name, gen.toTypesTypeRef(field.T), field.Optional))
}
return strings.Join(out, "\n")
}
+2 -2
View File
@@ -64,11 +64,11 @@ func New{{.Name}}() {{.Name}} {
func __typeRefOf{{.Name}}() types.TypeRef {
return types.MakeStructTypeRef("{{.Name}}",
[]types.Field{
{{range .Fields}}types.Field{"{{.Name}}", {{toTypesTypeRef .T}}},
{{range .Fields}}types.Field{"{{.Name}}", {{toTypesTypeRef .T}}, {{.Optional}}},
{{end}}
},
{{if .HasUnion}}[]types.Field{
{{range .Choices}}types.Field{"{{.Name}}", {{toTypesTypeRef .T}}},
{{range .Choices}}types.Field{"{{.Name}}", {{toTypesTypeRef .T}}, {{.Optional}}},
{{end}}
}{{else}}nil{{end}})
+1 -1
View File
@@ -60,7 +60,7 @@ func (self EnumStruct) Def() EnumStructDef {
func __typeRefOfEnumStruct() types.TypeRef {
return types.MakeStructTypeRef("EnumStruct",
[]types.Field{
types.Field{"hand", types.MakeTypeRef("Handedness", types.Ref{})},
types.Field{"hand", types.MakeTypeRef("Handedness", types.Ref{}), false},
},
nil)
+1 -1
View File
@@ -364,7 +364,7 @@ func (self StructWithRef) Def() StructWithRefDef {
func __typeRefOfStructWithRef() types.TypeRef {
return types.MakeStructTypeRef("StructWithRef",
[]types.Field{
types.Field{"r", types.MakeCompoundTypeRef("", types.RefKind, types.MakeCompoundTypeRef("", types.SetKind, types.MakePrimitiveTypeRef(types.Float32Kind)))},
types.Field{"r", types.MakeCompoundTypeRef("", types.RefKind, types.MakeCompoundTypeRef("", types.SetKind, types.MakePrimitiveTypeRef(types.Float32Kind))), false},
},
nil)
+2 -2
View File
@@ -63,8 +63,8 @@ func (self Struct) Def() StructDef {
func __typeRefOfStruct() types.TypeRef {
return types.MakeStructTypeRef("Struct",
[]types.Field{
types.Field{"s", types.MakePrimitiveTypeRef(types.StringKind)},
types.Field{"b", types.MakePrimitiveTypeRef(types.BoolKind)},
types.Field{"s", types.MakePrimitiveTypeRef(types.StringKind), false},
types.Field{"b", types.MakePrimitiveTypeRef(types.BoolKind), false},
},
nil)
+14 -14
View File
@@ -111,20 +111,20 @@ func (self StructPrimitives) Def() StructPrimitivesDef {
func __typeRefOfStructPrimitives() types.TypeRef {
return types.MakeStructTypeRef("StructPrimitives",
[]types.Field{
types.Field{"uint64", types.MakePrimitiveTypeRef(types.UInt64Kind)},
types.Field{"uint32", types.MakePrimitiveTypeRef(types.UInt32Kind)},
types.Field{"uint16", types.MakePrimitiveTypeRef(types.UInt16Kind)},
types.Field{"uint8", types.MakePrimitiveTypeRef(types.UInt8Kind)},
types.Field{"int64", types.MakePrimitiveTypeRef(types.Int64Kind)},
types.Field{"int32", types.MakePrimitiveTypeRef(types.Int32Kind)},
types.Field{"int16", types.MakePrimitiveTypeRef(types.Int16Kind)},
types.Field{"int8", types.MakePrimitiveTypeRef(types.Int8Kind)},
types.Field{"float64", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"float32", types.MakePrimitiveTypeRef(types.Float32Kind)},
types.Field{"bool", types.MakePrimitiveTypeRef(types.BoolKind)},
types.Field{"string", types.MakePrimitiveTypeRef(types.StringKind)},
types.Field{"blob", types.MakePrimitiveTypeRef(types.BlobKind)},
types.Field{"value", types.MakePrimitiveTypeRef(types.ValueKind)},
types.Field{"uint64", types.MakePrimitiveTypeRef(types.UInt64Kind), false},
types.Field{"uint32", types.MakePrimitiveTypeRef(types.UInt32Kind), false},
types.Field{"uint16", types.MakePrimitiveTypeRef(types.UInt16Kind), false},
types.Field{"uint8", types.MakePrimitiveTypeRef(types.UInt8Kind), false},
types.Field{"int64", types.MakePrimitiveTypeRef(types.Int64Kind), false},
types.Field{"int32", types.MakePrimitiveTypeRef(types.Int32Kind), false},
types.Field{"int16", types.MakePrimitiveTypeRef(types.Int16Kind), false},
types.Field{"int8", types.MakePrimitiveTypeRef(types.Int8Kind), false},
types.Field{"float64", types.MakePrimitiveTypeRef(types.Float64Kind), false},
types.Field{"float32", types.MakePrimitiveTypeRef(types.Float32Kind), false},
types.Field{"bool", types.MakePrimitiveTypeRef(types.BoolKind), false},
types.Field{"string", types.MakePrimitiveTypeRef(types.StringKind), false},
types.Field{"blob", types.MakePrimitiveTypeRef(types.BlobKind), false},
types.Field{"value", types.MakePrimitiveTypeRef(types.ValueKind), false},
},
nil)
+1 -1
View File
@@ -59,7 +59,7 @@ func (self Tree) Def() TreeDef {
func __typeRefOfTree() types.TypeRef {
return types.MakeStructTypeRef("Tree",
[]types.Field{
types.Field{"children", types.MakeCompoundTypeRef("", types.ListKind, types.MakeTypeRef("Tree", types.Ref{}))},
types.Field{"children", types.MakeCompoundTypeRef("", types.ListKind, types.MakeTypeRef("Tree", types.Ref{})), false},
},
nil)
+4 -4
View File
@@ -71,10 +71,10 @@ func (self StructWithList) Def() StructWithListDef {
func __typeRefOfStructWithList() types.TypeRef {
return types.MakeStructTypeRef("StructWithList",
[]types.Field{
types.Field{"l", types.MakeCompoundTypeRef("", types.ListKind, types.MakePrimitiveTypeRef(types.UInt8Kind))},
types.Field{"b", types.MakePrimitiveTypeRef(types.BoolKind)},
types.Field{"s", types.MakePrimitiveTypeRef(types.StringKind)},
types.Field{"i", types.MakePrimitiveTypeRef(types.Int64Kind)},
types.Field{"l", types.MakeCompoundTypeRef("", types.ListKind, types.MakePrimitiveTypeRef(types.UInt8Kind)), false},
types.Field{"b", types.MakePrimitiveTypeRef(types.BoolKind), false},
types.Field{"s", types.MakePrimitiveTypeRef(types.StringKind), false},
types.Field{"i", types.MakePrimitiveTypeRef(types.Int64Kind), false},
},
nil)
@@ -99,14 +99,14 @@ func (self StructWithUnionField) __unionValueToDef() interface{} {
func __typeRefOfStructWithUnionField() types.TypeRef {
return types.MakeStructTypeRef("StructWithUnionField",
[]types.Field{
types.Field{"a", types.MakePrimitiveTypeRef(types.Float32Kind)},
types.Field{"a", types.MakePrimitiveTypeRef(types.Float32Kind), false},
},
[]types.Field{
types.Field{"b", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"c", types.MakePrimitiveTypeRef(types.StringKind)},
types.Field{"d", types.MakePrimitiveTypeRef(types.BlobKind)},
types.Field{"e", types.MakePrimitiveTypeRef(types.ValueKind)},
types.Field{"f", types.MakeCompoundTypeRef("", types.SetKind, types.MakePrimitiveTypeRef(types.UInt8Kind))},
types.Field{"b", types.MakePrimitiveTypeRef(types.Float64Kind), false},
types.Field{"c", types.MakePrimitiveTypeRef(types.StringKind), false},
types.Field{"d", types.MakePrimitiveTypeRef(types.BlobKind), false},
types.Field{"e", types.MakePrimitiveTypeRef(types.ValueKind), false},
types.Field{"f", types.MakeCompoundTypeRef("", types.SetKind, types.MakePrimitiveTypeRef(types.UInt8Kind)), false},
})
}
+8 -8
View File
@@ -63,10 +63,10 @@ func (self StructWithUnions) Def() StructWithUnionsDef {
func __typeRefOfStructWithUnions() types.TypeRef {
return types.MakeStructTypeRef("StructWithUnions",
[]types.Field{
types.Field{"a", types.MakeStructTypeRef("", nil, []types.Field{types.Field{"b", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"c", types.MakePrimitiveTypeRef(types.StringKind)}})},
types.Field{"d", types.MakeStructTypeRef("", nil, []types.Field{types.Field{"e", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"f", types.MakePrimitiveTypeRef(types.StringKind)}})},
types.Field{"a", types.MakeStructTypeRef("", nil, []types.Field{types.Field{"b", types.MakePrimitiveTypeRef(types.Float64Kind), false},
types.Field{"c", types.MakePrimitiveTypeRef(types.StringKind), false}}), false},
types.Field{"d", types.MakeStructTypeRef("", nil, []types.Field{types.Field{"e", types.MakePrimitiveTypeRef(types.Float64Kind), false},
types.Field{"f", types.MakePrimitiveTypeRef(types.StringKind), false}}), false},
},
nil)
@@ -171,8 +171,8 @@ func __typeRefOf__unionOfBOfFloat64AndCOfString() types.TypeRef {
return types.MakeStructTypeRef("__unionOfBOfFloat64AndCOfString",
[]types.Field{},
[]types.Field{
types.Field{"b", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"c", types.MakePrimitiveTypeRef(types.StringKind)},
types.Field{"b", types.MakePrimitiveTypeRef(types.Float64Kind), false},
types.Field{"c", types.MakePrimitiveTypeRef(types.StringKind), false},
})
}
@@ -308,8 +308,8 @@ func __typeRefOf__unionOfEOfFloat64AndFOfString() types.TypeRef {
return types.MakeStructTypeRef("__unionOfEOfFloat64AndFOfString",
[]types.Field{},
[]types.Field{
types.Field{"e", types.MakePrimitiveTypeRef(types.Float64Kind)},
types.Field{"f", types.MakePrimitiveTypeRef(types.StringKind)},
types.Field{"e", types.MakePrimitiveTypeRef(types.Float64Kind), false},
types.Field{"f", types.MakePrimitiveTypeRef(types.StringKind), false},
})
}
+2 -2
View File
@@ -48,8 +48,8 @@ func (self Package) Def() PackageDef {
func __typeRefOfPackage() TypeRef {
return MakeStructTypeRef("Package",
[]Field{
Field{"Dependencies", MakeCompoundTypeRef("", SetKind, MakeCompoundTypeRef("", RefKind, MakeTypeRef("Package", Ref{})))},
Field{"Types", MakeCompoundTypeRef("", MapKind, MakePrimitiveTypeRef(StringKind), MakePrimitiveTypeRef(TypeRefKind))},
Field{"Dependencies", MakeCompoundTypeRef("", SetKind, MakeCompoundTypeRef("", RefKind, MakeTypeRef("Package", Ref{}))), false},
Field{"Types", MakeCompoundTypeRef("", MapKind, MakePrimitiveTypeRef(StringKind), MakePrimitiveTypeRef(TypeRefKind)), false},
},
nil)
+3 -2
View File
@@ -169,8 +169,9 @@ func MakeStructTypeRef(name string, fields, choices []Field) TypeRef {
// Field represents a Struct field or a Union choice.
// Neither Name nor T is allowed to be a zero-value, though T may be an unresolved TypeRef.
type Field struct {
Name string
T TypeRef
Name string
T TypeRef
Optional bool
}
func MakeTypeRef(name string, pkg Ref) TypeRef {
+4 -4
View File
@@ -17,12 +17,12 @@ func TestTypes(t *testing.T) {
mapType := MakeCompoundTypeRef("MapOfStringToUInt8", MapKind, stringType, uint8Type)
setType := MakeCompoundTypeRef("SetOfString", SetKind, stringType)
mahType := MakeStructTypeRef("MahStruct", []Field{
Field{"Field1", stringType},
Field{"Field2", boolType},
Field{"Field1", stringType, false},
Field{"Field2", boolType, false},
}, nil)
otherType := MakeStructTypeRef("MahOtherStruct", nil, []Field{
Field{"StructField", mahType},
Field{"StringField", stringType},
Field{"StructField", mahType, false},
Field{"StringField", stringType, false},
})
mRef := WriteValue(mapType, cs)