Skip to content

Commit 00246ca

Browse files
lvan100lianghuan
authored andcommitted
111
1 parent d906e74 commit 00246ca

File tree

2 files changed

+51
-53
lines changed

2 files changed

+51
-53
lines changed

gen/generator/golang/spec.go

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ type TypeField struct {
6666
Tag string
6767
Validate *string
6868
Binding *Binding
69+
FormName string
6970
Comment string
7071
}
7172

@@ -75,6 +76,10 @@ type Binding struct {
7576
Name string // Field name in the source
7677
}
7778

79+
func (x Binding) String() string {
80+
return fmt.Sprintf(`%s:"%s"`, x.From, x.Name)
81+
}
82+
7883
// IsRequestBody returns true if the struct is a request body
7984
func (t *Type) IsRequestBody() bool {
8085
return strings.HasSuffix(t.Name, "Body")
@@ -641,23 +646,43 @@ func parseBinding(arr []httpidl.Annotation) (*Binding, error) {
641646
return &Binding{From: a.Key, Name: val}, nil
642647
}
643648

644-
// genFieldTag generates the struct tag for a Go struct field.
645-
// It includes JSON tags and optional binding tags (path, query).
646-
func genFieldTag(fieldName, typeName string, arr []httpidl.Annotation, binding *Binding) (string, error) {
647-
var tags []string
649+
type JSONTag struct {
650+
Name string
651+
OmitEmpty bool
652+
OmitZero bool
653+
}
654+
655+
// JSONTag returns a JSON tag string for a field.
656+
func (tag JSONTag) String() string {
657+
var sb strings.Builder
658+
sb.WriteString(`json:"`)
659+
sb.WriteString(tag.Name)
660+
if tag.OmitEmpty {
661+
sb.WriteString(",omitempty")
662+
}
663+
if tag.OmitZero {
664+
sb.WriteString(",omitzero")
665+
}
666+
sb.WriteString(`"`)
667+
return sb.String()
668+
}
648669

649-
var jsonName string
650-
var omitZero bool
651-
omitEmpty := strings.HasPrefix(typeName, "*")
670+
// genJSONTag generates a JSON tag for a field.
671+
func genJSONTag(fieldName, typeName string, arr []httpidl.Annotation) (JSONTag, error) {
672+
var (
673+
jsonName = fieldName
674+
omitEmpty = strings.HasPrefix(typeName, "*")
675+
omitZero bool
676+
)
652677

653678
// Parse "json" annotation
654679
if a, ok := httpidl.GetAnnotation(arr, "json"); ok {
655680
if a.Value == nil {
656-
return "", errutil.Explain(nil, `annotation "json" value is nil`)
681+
return JSONTag{}, errutil.Explain(nil, `annotation "json" value is nil`)
657682
}
658683
s := strings.TrimSpace(*a.Value)
659684
if s == "" {
660-
return "", errutil.Explain(nil, `annotation "json" value is empty`)
685+
return JSONTag{}, errutil.Explain(nil, `annotation "json" value is empty`)
661686
}
662687
s = strings.Trim(s, "\"") // Remove quotes
663688
for i, v := range strings.Split(s, ",") {
@@ -680,20 +705,27 @@ func genFieldTag(fieldName, typeName string, arr []httpidl.Annotation, binding *
680705
}
681706
}
682707

683-
if jsonName == "" {
684-
jsonName += fieldName
685-
}
686-
if omitEmpty {
687-
jsonName += ",omitempty"
688-
}
689-
if omitZero {
690-
jsonName += ",omitzero"
708+
return JSONTag{
709+
Name: jsonName,
710+
OmitEmpty: omitEmpty,
711+
OmitZero: omitZero,
712+
}, nil
713+
}
714+
715+
// genFieldTag generates the struct tag for a Go struct field.
716+
// It includes JSON tags and optional binding tags (path, query).
717+
func genFieldTag(fieldName, typeName string, arr []httpidl.Annotation, binding *Binding) (string, error) {
718+
var tags []string
719+
720+
jsonTag, err := genJSONTag(fieldName, typeName, arr)
721+
if err != nil {
722+
return "", err
691723
}
692-
tags = append(tags, fmt.Sprintf("json:\"%s\"", jsonName))
724+
tags = append(tags, jsonTag.String())
693725

694726
// Generate binding tag
695727
if binding != nil {
696-
tags = append(tags, fmt.Sprintf("%s:\"%s\"", binding.From, binding.Name))
728+
tags = append(tags, binding.String())
697729
}
698730

699731
return "`" + strings.Join(tags, " ") + "`", nil

gen/testdata/manager/go/proto/manager_http.go

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)