Skip to content

Commit 805e9e7

Browse files
lvan100lianghuan
authored andcommitted
111
1 parent 726af34 commit 805e9e7

File tree

3 files changed

+32
-24
lines changed

3 files changed

+32
-24
lines changed

gen/generator/golang/type.go

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,12 @@ func convertEnums(ctx Context, doc tidl.Document) ([]Enum, error) {
265265
}
266266
var fields []EnumField
267267
for i, f := range t.Fields {
268+
fieldName, err := getJSONName(f.Name, f.Annotations)
269+
if err != nil {
270+
return nil, err
271+
}
268272
fields = append(fields, EnumField{
269-
Name: f.Name,
273+
Name: fieldName,
270274
Value: int64(i),
271275
})
272276
}
@@ -634,8 +638,9 @@ func parseBinding(arr []tidl.Annotation) (*Binding, error) {
634638
func genFieldTag(fieldName, typeName string, arr []tidl.Annotation, binding *Binding) (string, error) {
635639
var tags []string
636640

637-
var jsonTag string
638-
var jsonName = fieldName
641+
var jsonName string
642+
var omitZero bool
643+
omitEmpty := strings.HasPrefix(typeName, "*")
639644

640645
// Generate JSON tag
641646
if a, ok := tidl.GetAnnotation(arr, "json"); ok {
@@ -646,27 +651,30 @@ func genFieldTag(fieldName, typeName string, arr []tidl.Annotation, binding *Bin
646651
if s == "" {
647652
return "", fmt.Errorf("annotation json value is empty")
648653
}
649-
jsonTag = strings.Trim(s, "\"") // Remove quotes
650-
}
651-
652-
omitZero := false
653-
omitEmpty := strings.HasPrefix(typeName, "*")
654-
655-
for s := range strings.SplitSeq(jsonTag, ",") {
656-
switch s = strings.TrimSpace(s); s {
657-
case "omitempty":
658-
omitEmpty = true
659-
case "non-omitempty":
660-
omitEmpty = false
661-
case "omitzero":
662-
omitZero = true
663-
default:
664-
if v, ok := strings.CutPrefix(s, "name="); ok {
665-
jsonName = strings.TrimSpace(v)
654+
s = strings.Trim(s, "\"") // Remove quotes
655+
for i, v := range strings.Split(s, ",") {
656+
v = strings.TrimSpace(v)
657+
if i == 0 {
658+
if v != "" {
659+
jsonName = v
660+
}
661+
continue
662+
}
663+
switch v {
664+
case "omitempty":
665+
omitEmpty = true
666+
case "non-omitempty":
667+
omitEmpty = false
668+
case "omitzero":
669+
omitZero = true
670+
default: // for linter
666671
}
667672
}
668673
}
669674

675+
if jsonName == "" {
676+
jsonName += fieldName
677+
}
670678
if omitEmpty {
671679
jsonName += ",omitempty"
672680
}

gen/testdata/manager/idl/manager.idl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,10 @@ type CreateManagerReq {
118118

119119
// Update existing manager
120120
type UpdateManagerReq {
121-
string ID (json="name=id", path="id")
121+
string ID (json="id", path="id")
122122
string? name
123123
int? age (validate="$ >= MIN_AGE && $ <= MAX_AGE")
124-
bool? vip (json="non-omitempty")
124+
bool? vip (json=",non-omitempty")
125125
float? salary (validate="$ >= SALARY_MIN && $ <= SALARY_MAX")
126126
string? role
127127
ManagerLevel? level

gen/testdata/manager/idl/stream.idl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ type StreamResp {
1212

1313
oneof Payload {
1414
string text_data
15-
int? number_data
16-
bool boolean_data
15+
int? numberData (json="number_data")
16+
bool boolean_data (json="")
1717
}
1818

1919
rpc Stream(StreamReq) stream<StreamResp> {

0 commit comments

Comments
 (0)