Skip to content

Commit 8763b3c

Browse files
committed
feat: sorted response jons keys
1 parent 67f3877 commit 8763b3c

File tree

3 files changed

+63
-55
lines changed

3 files changed

+63
-55
lines changed

examples/docs/apis-greeter.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ GET /greeter
1818
// object main
1919
{
2020
"code": 0, // int, 返回状态码
21-
"msg": "返回消息", // string, 返回文本消息
2221
"data": {
2322
"my_title": "example" // string, 标题
24-
}
23+
},
24+
"msg": "返回消息" // string, 返回文本消息
2525
}
2626
```
2727

@@ -31,8 +31,8 @@ GET /greeter
3131
// StatusCode: 500
3232
// object main
3333
{
34-
"data": null, // any, 返回的具体数据
3534
"code": 10010, // int, 返回状态码
35+
"data": null, // any, 返回的具体数据
3636
"msg": "异常" // string, 返回文本消息
3737
}
3838
```

parser.go

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -432,57 +432,57 @@ func (parser *Parser) ParseDefinition(typeSpecDef *TypeSpecDef) (*TypeSchema, er
432432
return &sch, nil
433433
}
434434

435-
func (parser *Parser) parseTypeExpr(file *ast.File, field *ast.Field, typeExpr ast.Expr, ref bool) (*TypeSchema, error) {
436-
switch expr := typeExpr.(type) {
437-
// type Foo interface{}
438-
case *ast.InterfaceType:
439-
return &TypeSchema{}, nil
440-
441-
// type Foo struct {...}
442-
case *ast.StructType:
443-
return parser.parseStruct(file, expr.Fields)
444-
445-
// type Foo Baz
446-
case *ast.Ident:
447-
return parser.getTypeSchema(expr.Name, file, field, ref)
448-
449-
// type Foo *Baz
450-
case *ast.StarExpr:
451-
return parser.parseTypeExpr(file, field, expr.X, ref)
452-
453-
// type Foo pkg.Bar
454-
case *ast.SelectorExpr:
455-
if xIdent, ok := expr.X.(*ast.Ident); ok {
456-
return parser.getTypeSchema(fullTypeName(xIdent.Name, expr.Sel.Name), file, field, ref)
457-
}
458-
// type Foo []Baz
459-
case *ast.ArrayType:
460-
itemSchema, err := parser.parseTypeExpr(file, field, expr.Elt, true)
461-
if err != nil {
462-
return nil, err
463-
}
464-
return &TypeSchema{Type: "array", ArraySchema: itemSchema}, nil
465-
// type Foo map[string]Bar
466-
// case *ast.MapType:
467-
// if _, ok := expr.Value.(*ast.InterfaceType); ok {
468-
// return &TypeSchema{Type: OBJECT, Properties: nil}, nil
469-
// }
470-
// schema, err := parser.parseTypeExpr(file, expr.Value, true)
471-
// if err != nil {
472-
// return nil, err
473-
// }
474-
475-
// return spec.MapProperty(schema), nil
476-
477-
// case *ast.FuncType:
478-
// return nil, ErrFuncTypeField
479-
// ...
480-
default:
481-
fmt.Printf("Type definition of type '%T' is not supported yet. Using 'object' instead.\n", typeExpr)
482-
}
483-
484-
return &TypeSchema{Type: OBJECT}, nil
485-
}
435+
// func (parser *Parser) parseTypeExpr(file *ast.File, field *ast.Field, typeExpr ast.Expr, ref bool) (*TypeSchema, error) {
436+
// switch expr := typeExpr.(type) {
437+
// // type Foo interface{}
438+
// case *ast.InterfaceType:
439+
// return &TypeSchema{}, nil
440+
441+
// // type Foo struct {...}
442+
// case *ast.StructType:
443+
// return parser.parseStruct(file, expr.Fields)
444+
445+
// // type Foo Baz
446+
// case *ast.Ident:
447+
// return parser.getTypeSchema(expr.Name, file, field, ref)
448+
449+
// // type Foo *Baz
450+
// case *ast.StarExpr:
451+
// return parser.parseTypeExpr(file, field, expr.X, ref)
452+
453+
// // type Foo pkg.Bar
454+
// case *ast.SelectorExpr:
455+
// if xIdent, ok := expr.X.(*ast.Ident); ok {
456+
// return parser.getTypeSchema(fullTypeName(xIdent.Name, expr.Sel.Name), file, field, ref)
457+
// }
458+
// // type Foo []Baz
459+
// case *ast.ArrayType:
460+
// itemSchema, err := parser.parseTypeExpr(file, field, expr.Elt, true)
461+
// if err != nil {
462+
// return nil, err
463+
// }
464+
// return &TypeSchema{Type: "array", ArraySchema: itemSchema}, nil
465+
// // type Foo map[string]Bar
466+
// // case *ast.MapType:
467+
// // if _, ok := expr.Value.(*ast.InterfaceType); ok {
468+
// // return &TypeSchema{Type: OBJECT, Properties: nil}, nil
469+
// // }
470+
// // schema, err := parser.parseTypeExpr(file, expr.Value, true)
471+
// // if err != nil {
472+
// // return nil, err
473+
// // }
474+
475+
// // return spec.MapProperty(schema), nil
476+
477+
// // case *ast.FuncType:
478+
// // return nil, ErrFuncTypeField
479+
// // ...
480+
// default:
481+
// fmt.Printf("Type definition of type '%T' is not supported yet. Using 'object' instead.\n", typeExpr)
482+
// }
483+
484+
// return &TypeSchema{Type: OBJECT}, nil
485+
// }
486486

487487
func (parser *Parser) parseStruct(file *ast.File, fields *ast.FieldList) (*TypeSchema, error) {
488488
properties := make(map[string]*TypeSchema)

spec.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"go/ast"
66
"reflect"
7+
"sort"
78
"strconv"
89
"strings"
910
)
@@ -88,7 +89,14 @@ func (s *TypeSchema) parseJSON(depth int, sb *strings.Builder, isNewLine bool) {
8889
sb.WriteString("\n")
8990
var i int = 0
9091
prefix2 := prefix + " "
91-
for k, v := range s.Properties {
92+
//sort keys
93+
var keys []string
94+
for k := range s.Properties {
95+
keys = append(keys, k)
96+
}
97+
sort.Strings(keys)
98+
for _, k := range keys {
99+
v := s.Properties[k]
92100
sb.WriteString(fmt.Sprintf(prefix2+"\"%s\": ", k)) //write key
93101
v.parseJSON(depth+1, sb, false)
94102
haxNext := i < len(s.Properties)-1

0 commit comments

Comments
 (0)