Skip to content

Commit

Permalink
Map design.Number & design.Boolean to string|[]string in command
Browse files Browse the repository at this point in the history
Client is generated fully typed with bool and float64
  • Loading branch information
aslakknutsen committed Jul 21, 2016
1 parent 3acbb6a commit b78f3e9
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 25 deletions.
95 changes: 72 additions & 23 deletions goagen/gen_client/cli_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,9 +283,9 @@ func joinNames(useNil bool, atts ...*design.AttributeDefinition) string {
case design.Integer:
field = `intFlagVal("` + n + `", ` + field + ")"
case design.Number:
field = `float64FlagVal("` + n + `", ` + field + ")"
field = "float64Val(" + field + ")"
case design.Boolean:
field = `boolFlagVal("` + n + `", ` + field + ")"
field = "boolVal(" + field + ")"
case design.String:
field = `stringFlagVal("` + n + `", ` + field + ")"
case design.UUID:
Expand All @@ -302,6 +302,10 @@ func joinNames(useNil bool, atts ...*design.AttributeDefinition) string {
}
} else if a.Type.IsArray() {
switch a.Type.ToArray().ElemType.Type {
case design.Number:
field = "float64Array(" + field + ")"
case design.Boolean:
field = "boolArray(" + field + ")"
case design.UUID:
field = "uuidArray(" + field + ")"
case design.DateTime:
Expand Down Expand Up @@ -388,9 +392,9 @@ func flagType(att *design.AttributeDefinition) string {
case design.IntegerKind:
return "Int"
case design.NumberKind:
return "Float64"
return "String"
case design.BooleanKind:
return "Bool"
return "String"
case design.StringKind:
return "String"
case design.DateTimeKind:
Expand All @@ -400,7 +404,14 @@ func flagType(att *design.AttributeDefinition) string {
case design.AnyKind:
return "String"
case design.ArrayKind:
return flagType(att.Type.(*design.Array).ElemType) + "Slice"
switch att.Type.ToArray().ElemType.Type.Kind() {
case design.NumberKind:
return "StringSlice"
case design.BooleanKind:
return "StringSlice"
default:
return flagType(att.Type.(*design.Array).ElemType) + "Slice"
}
case design.UserTypeKind:
return flagType(att.Type.(*design.UserTypeDefinition).AttributeDefinition)
case design.MediaTypeKind:
Expand Down Expand Up @@ -721,15 +732,15 @@ func jsonVal(val string) *interface{} {
return &t
}
func jsonArray(ids []string) []interface{} {
if ids == nil {
func jsonArray(ins []string) []interface{} {
if ins == nil {
return nil
}
var times []interface{}
for _, id := range ids {
times = append(times, jsonVal(id))
var vals []interface{}
for _, id := range ins {
vals = append(vals, jsonVal(id))
}
return times
return vals
}
func timeVal(val string) *time.Time {
Expand All @@ -740,15 +751,15 @@ func timeVal(val string) *time.Time {
return &t
}
func timeArray(ids []string) []time.Time {
if ids == nil {
func timeArray(ins []string) []time.Time {
if ins == nil {
return nil
}
var times []time.Time
for _, id := range ids {
times = append(times, *timeVal(id))
var vals []time.Time
for _, id := range ins {
vals = append(vals, *timeVal(id))
}
return times
return vals
}
func uuidVal(val string) *uuid.UUID {
Expand All @@ -759,13 +770,51 @@ func uuidVal(val string) *uuid.UUID {
return &t
}
func uuidArray(ids []string) []uuid.UUID {
if ids == nil {
func uuidArray(ins []string) []uuid.UUID {
if ins == nil {
return nil
}
var vals []uuid.UUID
for _, id := range ins {
vals = append(vals, *uuidVal(id))
}
return vals
}
func float64Val(val string) *float64 {
t, err := strconv.ParseFloat(val, 64)
if err != nil {
panic(err)
}
return &t
}
func float64Array(ins []string) []float64 {
if ins == nil {
return nil
}
var vals []float64
for _, id := range ins {
vals = append(vals, *float64Val(id))
}
return vals
}
func boolVal(val string) *bool {
t, err := strconv.ParseBool(val)
if err != nil {
panic(err)
}
return &t
}
func boolArray(ins []string) []bool {
if ins == nil {
return nil
}
var uuids []uuid.UUID
for _, id := range ids {
uuids = append(uuids, *uuidVal(id))
var vals []bool
for _, id := range ins {
vals = append(vals, *boolVal(id))
}
return uuids
return vals
}`
4 changes: 2 additions & 2 deletions goagen/gen_client/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -662,9 +662,9 @@ func cmdFieldTypeString(t design.DataType, point bool) string {
if point && !t.IsArray() {
pointer = "*"
}
if t.Kind() == design.UUIDKind || t.Kind() == design.DateTimeKind || t.Kind() == design.AnyKind {
if t.Kind() == design.UUIDKind || t.Kind() == design.DateTimeKind || t.Kind() == design.AnyKind || t.Kind() == design.NumberKind || t.Kind() == design.BooleanKind {
suffix = "string"
} else if isArrayOfType(t, design.UUIDKind, design.DateTimeKind, design.AnyKind) {
} else if isArrayOfType(t, design.UUIDKind, design.DateTimeKind, design.AnyKind, design.NumberKind, design.BooleanKind) {
suffix = "[]string"
} else {
suffix = codegen.GoNativeType(t)
Expand Down

0 comments on commit b78f3e9

Please sign in to comment.