mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-13 18:00:00 +08:00
(goctl): fix nested struct generation (#4281)
This commit is contained in:
@@ -157,8 +157,8 @@ func convertDataType(api *spec.ApiSpec, isLegacy bool) (error, *DartSpec) {
|
|||||||
defineStruct, ok := ty.(spec.DefineStruct)
|
defineStruct, ok := ty.(spec.DefineStruct)
|
||||||
if ok {
|
if ok {
|
||||||
for index, member := range defineStruct.Members {
|
for index, member := range defineStruct.Members {
|
||||||
structMember, ok := member.Type.(spec.DefineStruct)
|
structMember, ok := member.Type.(spec.NestedStruct)
|
||||||
if ok && structMember.IsNestedStruct() {
|
if ok {
|
||||||
defineStruct.Members[index].Type = spec.PrimitiveType{RawName: member.Name}
|
defineStruct.Members[index].Type = spec.PrimitiveType{RawName: member.Name}
|
||||||
t := template.New("dataTemplate")
|
t := template.New("dataTemplate")
|
||||||
t = t.Funcs(funcMap)
|
t = t.Funcs(funcMap)
|
||||||
|
|||||||
@@ -63,8 +63,8 @@ func writeProperty(writer io.Writer, name, tag, comment string, tp spec.Type, in
|
|||||||
err error
|
err error
|
||||||
isNestedStruct bool
|
isNestedStruct bool
|
||||||
)
|
)
|
||||||
structType, ok := tp.(spec.DefineStruct)
|
structType, ok := tp.(spec.NestedStruct)
|
||||||
if ok && structType.IsNestedStruct() {
|
if ok {
|
||||||
isNestedStruct = true
|
isNestedStruct = true
|
||||||
}
|
}
|
||||||
if len(comment) > 0 {
|
if len(comment) > 0 {
|
||||||
|
|||||||
@@ -30,9 +30,19 @@ func (t DefineStruct) Documents() []string {
|
|||||||
return t.Docs
|
return t.Docs
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsNestedStruct returns whether the structure is nested.
|
// Name returns a structure string, such as User
|
||||||
func (t DefineStruct) IsNestedStruct() bool {
|
func (t NestedStruct) Name() string {
|
||||||
return len(t.Members) > 0
|
return t.RawName
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comments returns the comments of struct
|
||||||
|
func (t NestedStruct) Comments() []string {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Documents returns the documents of struct
|
||||||
|
func (t NestedStruct) Documents() []string {
|
||||||
|
return t.Docs
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name returns a map string, such as map[string]int
|
// Name returns a map string, such as map[string]int
|
||||||
|
|||||||
@@ -105,6 +105,13 @@ type (
|
|||||||
Docs Doc
|
Docs Doc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NestedStruct describes a structure nested in structure.
|
||||||
|
NestedStruct struct {
|
||||||
|
RawName string
|
||||||
|
Members []Member
|
||||||
|
Docs Doc
|
||||||
|
}
|
||||||
|
|
||||||
// PrimitiveType describes the basic golang type, such as bool,int32,int64, ...
|
// PrimitiveType describes the basic golang type, such as bool,int32,int64, ...
|
||||||
PrimitiveType struct {
|
PrimitiveType struct {
|
||||||
RawName string
|
RawName string
|
||||||
|
|||||||
@@ -54,8 +54,8 @@ func writeIndent(writer io.Writer, indent int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func genTsType(m spec.Member, indent int) (ty string, err error) {
|
func genTsType(m spec.Member, indent int) (ty string, err error) {
|
||||||
v, ok := m.Type.(spec.DefineStruct)
|
v, ok := m.Type.(spec.NestedStruct)
|
||||||
if ok && v.IsNestedStruct() {
|
if ok {
|
||||||
writer := bytes.NewBuffer(nil)
|
writer := bytes.NewBuffer(nil)
|
||||||
_, err := fmt.Fprintf(writer, "{\n")
|
_, err := fmt.Fprintf(writer, "{\n")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func (a *Analyzer) astTypeToSpec(in ast.DataType) (spec.Type, error) {
|
|||||||
return nil, ast.SyntaxError(v.Pos(), "unsupported empty struct")
|
return nil, ast.SyntaxError(v.Pos(), "unsupported empty struct")
|
||||||
}
|
}
|
||||||
|
|
||||||
return spec.DefineStruct{
|
return spec.NestedStruct{
|
||||||
RawName: v.RawText(),
|
RawName: v.RawText(),
|
||||||
Members: members,
|
Members: members,
|
||||||
}, nil
|
}, nil
|
||||||
@@ -347,14 +347,12 @@ func (a *Analyzer) fillTypes() error {
|
|||||||
for _, member := range v.Members {
|
for _, member := range v.Members {
|
||||||
switch v := member.Type.(type) {
|
switch v := member.Type.(type) {
|
||||||
case spec.DefineStruct:
|
case spec.DefineStruct:
|
||||||
if !v.IsNestedStruct() {
|
tp, err := a.findDefinedType(v.RawName)
|
||||||
tp, err := a.findDefinedType(v.RawName)
|
if err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
member.Type = tp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
member.Type = tp
|
||||||
}
|
}
|
||||||
members = append(members, member)
|
members = append(members, member)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user