diff --git a/example/user.api b/example/user.api index 42301b5..1cc0b1c 100644 --- a/example/user.api +++ b/example/user.api @@ -6,21 +6,21 @@ info( version: "type version here" ) + type ( RegisterReq { Username string `json:"username"` Password string `json:"password"` Mobile string `json:"mobile"` } - // 登录请求 + LoginReq { - Username string `json:"username" desc:"用户名"` - Password string `json:"password"` //密码 - } // 登录请求 + Username string `json:"username"` + Password string `json:"password"` + } UserInfoReq { - Id string `path:"id"` // 会员ID - Page string `form:"page,default=1"` //分页 + Id string `path:"id"` } UserInfoReply { @@ -34,17 +34,11 @@ type ( UserSearchReq { KeyWord string `form:"keyWord"` } - - UserSearchReply { - KeyWord []*UserInfoReply - KeyWords []*UserSearchReq - } ) service user-api { @doc( summary: "注册" - description: "注册一个用户" ) @handler register post /api/user/register (RegisterReq) @@ -65,15 +59,5 @@ service user-api { summary: "用户搜索" ) @handler searchUser - get /api/user/search (UserSearchReq) returns (UserSearchReply) -} - -@server( - jwt: Auth - group: greet - middleware: LogHandler -) -service user-api { - @handler ping - get /user/ping + get /api/user/search (UserSearchReq) returns (UserInfoReply) } \ No newline at end of file diff --git a/generate/parser.go b/generate/parser.go index ab53f52..7a883c8 100644 --- a/generate/parser.go +++ b/generate/parser.go @@ -85,58 +85,57 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge } } } - defineStruct, _ := route.RequestType.(spec.DefineStruct) - - if strings.ToUpper(route.Method) == http.MethodGet { - - for _, member := range defineStruct.Members { - if strings.Contains(member.Tag, "path") { - continue - } - - tempKind := swaggerMapTypes[strings.Replace(member.Type.Name(), "[]", "", -1)] - ftype, format, ok := primitiveSchema(tempKind, member.Type.Name()) - if !ok { - ftype = tempKind.String() - format = "UNKNOWN" - } - sp := swaggerParameterObject{In: "query", Type: ftype, Format: format} - - for _, tag := range member.Tags() { - sp.Name = tag.Name - if len(tag.Options) == 0 { - sp.Required = true + if defineStruct, ok := route.RequestType.(spec.DefineStruct); ok { + if strings.ToUpper(route.Method) == http.MethodGet { + for _, member := range defineStruct.Members { + if strings.Contains(member.Tag, "path") { continue } - for _, option := range tag.Options { - if strings.HasPrefix(option, defaultOption) { - segs := strings.Split(option, equalToken) - if len(segs) == 2 { - sp.Default = segs[1] - } - } else if !strings.HasPrefix(option, optionalOption) { + tempKind := swaggerMapTypes[strings.Replace(member.Type.Name(), "[]", "", -1)] + ftype, format, ok := primitiveSchema(tempKind, member.Type.Name()) + if !ok { + ftype = tempKind.String() + format = "UNKNOWN" + } + sp := swaggerParameterObject{In: "query", Type: ftype, Format: format} + + for _, tag := range member.Tags() { + sp.Name = tag.Name + if len(tag.Options) == 0 { sp.Required = true + continue + } + for _, option := range tag.Options { + if strings.HasPrefix(option, defaultOption) { + segs := strings.Split(option, equalToken) + if len(segs) == 2 { + sp.Default = segs[1] + } + } else if !strings.HasPrefix(option, optionalOption) { + sp.Required = true + } } } + parameters = append(parameters, sp) } - parameters = append(parameters, sp) - } - } else { - reqRef := fmt.Sprintf("#/definitions/%s", route.RequestType.Name()) + } else { - if len(route.RequestType.Name()) > 0 { - var schema = swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: reqRef, - }, + reqRef := fmt.Sprintf("#/definitions/%s", route.RequestType.Name()) + + if len(route.RequestType.Name()) > 0 { + var schema = swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: reqRef, + }, + } + parameters = append(parameters, swaggerParameterObject{ + Name: "body", + In: "body", + Required: true, + Schema: &schema, + }) } - parameters = append(parameters, swaggerParameterObject{ - Name: "body", - In: "body", - Required: true, - Schema: &schema, - }) } } @@ -146,18 +145,14 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge } desc := "A successful response." - respRef := fmt.Sprintf("#/definitions/%s", route.ResponseType.Name()) - - if len(route.ResponseType.Name()) < 1 { - respRef = "" + respRef := "" + if route.ResponseType != nil && len(route.ResponseType.Name()) > 0 { + respRef = fmt.Sprintf("#/definitions/%s", route.ResponseType.Name()) } - tags := service.Name - if value := group.GetAnnotation("group"); len(value) > 0 { tags = value } - operationObject := &swaggerOperationObject{ Tags: []string{tags}, Parameters: parameters,