2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -16,3 +16,5 @@ Thumbs.db
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
.swagger-codegen
 | 
			
		||||
swagtest
 | 
			
		||||
*.exe
 | 
			
		||||
@@ -6,7 +6,6 @@ info(
 | 
			
		||||
	version: "type version here"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
 | 
			
		||||
	//注册请求结构
 | 
			
		||||
@@ -19,6 +18,7 @@ type (
 | 
			
		||||
	LoginReq {
 | 
			
		||||
		Username string `json:"username"` //测试
 | 
			
		||||
		Password string `json:"password"` //测试2
 | 
			
		||||
		AppId    string `header:"appId"`  //APPID-TEST
 | 
			
		||||
	}
 | 
			
		||||
	UserInfoReq {
 | 
			
		||||
		Id string `path:"id"`
 | 
			
		||||
 
 | 
			
		||||
@@ -162,73 +162,13 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
 | 
			
		||||
			}
 | 
			
		||||
			if defineStruct, ok := route.RequestType.(spec.DefineStruct); ok {
 | 
			
		||||
				for _, member := range defineStruct.Members {
 | 
			
		||||
					if member.Name == "" {
 | 
			
		||||
						memberDefineStruct, _ := member.Type.(spec.DefineStruct)
 | 
			
		||||
						for _, m := range memberDefineStruct.Members {
 | 
			
		||||
							if strings.Contains(m.Tag, "header") {
 | 
			
		||||
								tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
 | 
			
		||||
								ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
 | 
			
		||||
								if !ok {
 | 
			
		||||
									ftype = tempKind.String()
 | 
			
		||||
									format = "UNKNOWN"
 | 
			
		||||
								}
 | 
			
		||||
								sp := swaggerParameterObject{In: "header", Type: ftype, Format: format}
 | 
			
		||||
 | 
			
		||||
								for _, tag := range m.Tags() {
 | 
			
		||||
									sp.Name = tag.Name
 | 
			
		||||
									if len(tag.Options) == 0 {
 | 
			
		||||
										sp.Required = true
 | 
			
		||||
										continue
 | 
			
		||||
									}
 | 
			
		||||
 | 
			
		||||
									required := true
 | 
			
		||||
									for _, option := range tag.Options {
 | 
			
		||||
										if strings.HasPrefix(option, optionsOption) {
 | 
			
		||||
											segs := strings.SplitN(option, equalToken, 2)
 | 
			
		||||
											if len(segs) == 2 {
 | 
			
		||||
												sp.Enum = strings.Split(segs[1], optionSeparator)
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
 | 
			
		||||
										if strings.HasPrefix(option, rangeOption) {
 | 
			
		||||
											segs := strings.SplitN(option, equalToken, 2)
 | 
			
		||||
											if len(segs) == 2 {
 | 
			
		||||
												min, max, ok := parseRangeOption(segs[1])
 | 
			
		||||
												if ok {
 | 
			
		||||
													sp.Schema.Minimum = min
 | 
			
		||||
													sp.Schema.Maximum = max
 | 
			
		||||
												}
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
 | 
			
		||||
										if strings.HasPrefix(option, defaultOption) {
 | 
			
		||||
											segs := strings.Split(option, equalToken)
 | 
			
		||||
											if len(segs) == 2 {
 | 
			
		||||
												sp.Default = segs[1]
 | 
			
		||||
											}
 | 
			
		||||
										} else if strings.HasPrefix(option, optionalOption) || strings.HasPrefix(option, omitemptyOption) {
 | 
			
		||||
											required = false
 | 
			
		||||
										}
 | 
			
		||||
 | 
			
		||||
										if strings.HasPrefix(option, exampleOption) {
 | 
			
		||||
											segs := strings.Split(option, equalToken)
 | 
			
		||||
											if len(segs) == 2 {
 | 
			
		||||
												sp.Example = segs[1]
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
									}
 | 
			
		||||
									sp.Required = required
 | 
			
		||||
								}
 | 
			
		||||
								sp.Description = strings.TrimLeft(m.Comment, "//")
 | 
			
		||||
								parameters = append(parameters, sp)
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						continue
 | 
			
		||||
					if hasHeaderParameters(member) {
 | 
			
		||||
						parameters = parseHeader(member, parameters)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				if strings.ToUpper(route.Method) == http.MethodGet {
 | 
			
		||||
					for _, member := range defineStruct.Members {
 | 
			
		||||
						if strings.Contains(member.Tag, "path") {
 | 
			
		||||
						if hasPathParameters(member) || hasHeaderParameters(member) {
 | 
			
		||||
							continue
 | 
			
		||||
						}
 | 
			
		||||
						if embedStruct, isEmbed := member.Type.(spec.DefineStruct); isEmbed {
 | 
			
		||||
@@ -483,7 +423,7 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
 | 
			
		||||
		schema.Title = defineStruct.Name()
 | 
			
		||||
 | 
			
		||||
		for _, member := range defineStruct.Members {
 | 
			
		||||
			if hasPathParameters(member) {
 | 
			
		||||
			if hasPathParameters(member) || hasHeaderParameters(member) {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			kv := keyVal{Value: schemaOfField(member)}
 | 
			
		||||
@@ -494,8 +434,7 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
 | 
			
		||||
			if kv.Key == "" {
 | 
			
		||||
				memberStruct, _ := member.Type.(spec.DefineStruct)
 | 
			
		||||
				for _, m := range memberStruct.Members {
 | 
			
		||||
 | 
			
		||||
					if strings.Contains(m.Tag, "header") {
 | 
			
		||||
					if hasHeaderParameters(m) || hasPathParameters(m) {
 | 
			
		||||
						continue
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
@@ -560,6 +499,15 @@ func hasPathParameters(member spec.Member) bool {
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func hasHeaderParameters(member spec.Member) bool {
 | 
			
		||||
	for _, tag := range member.Tags() {
 | 
			
		||||
		if tag.Key == "header" {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func schemaOfField(member spec.Member) swaggerSchemaObject {
 | 
			
		||||
	ret := swaggerSchemaObject{}
 | 
			
		||||
 | 
			
		||||
@@ -751,3 +699,73 @@ func contains(s []string, str string) bool {
 | 
			
		||||
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseHeader(m spec.Member, parameters []swaggerParameterObject) []swaggerParameterObject {
 | 
			
		||||
 | 
			
		||||
	tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
 | 
			
		||||
	ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
 | 
			
		||||
	if !ok {
 | 
			
		||||
		ftype = tempKind.String()
 | 
			
		||||
		format = "UNKNOWN"
 | 
			
		||||
	}
 | 
			
		||||
	sp := swaggerParameterObject{In: "header", Type: ftype, Format: format}
 | 
			
		||||
 | 
			
		||||
	for _, tag := range m.Tags() {
 | 
			
		||||
		sp.Name = tag.Name
 | 
			
		||||
		if len(tag.Options) == 0 {
 | 
			
		||||
			sp.Required = true
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		required := true
 | 
			
		||||
		for _, option := range tag.Options {
 | 
			
		||||
			if strings.HasPrefix(option, optionsOption) {
 | 
			
		||||
				segs := strings.SplitN(option, equalToken, 2)
 | 
			
		||||
				if len(segs) == 2 {
 | 
			
		||||
					sp.Enum = strings.Split(segs[1], optionSeparator)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if strings.HasPrefix(option, rangeOption) {
 | 
			
		||||
				segs := strings.SplitN(option, equalToken, 2)
 | 
			
		||||
				if len(segs) == 2 {
 | 
			
		||||
					min, max, ok := parseRangeOption(segs[1])
 | 
			
		||||
					if ok {
 | 
			
		||||
						sp.Schema.Minimum = min
 | 
			
		||||
						sp.Schema.Maximum = max
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if strings.HasPrefix(option, defaultOption) {
 | 
			
		||||
				segs := strings.Split(option, equalToken)
 | 
			
		||||
				if len(segs) == 2 {
 | 
			
		||||
					sp.Default = segs[1]
 | 
			
		||||
				}
 | 
			
		||||
			} else if strings.HasPrefix(option, optionalOption) || strings.HasPrefix(option, omitemptyOption) {
 | 
			
		||||
				required = false
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if strings.HasPrefix(option, exampleOption) {
 | 
			
		||||
				segs := strings.Split(option, equalToken)
 | 
			
		||||
				if len(segs) == 2 {
 | 
			
		||||
					sp.Example = segs[1]
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		sp.Required = required
 | 
			
		||||
	}
 | 
			
		||||
	sp.Description = strings.TrimLeft(m.Comment, "//")
 | 
			
		||||
	if m.Name == "" {
 | 
			
		||||
		memberDefineStruct, ok := m.Type.(spec.DefineStruct)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return parameters
 | 
			
		||||
		}
 | 
			
		||||
		for _, cm := range memberDefineStruct.Members {
 | 
			
		||||
			if hasHeaderParameters(cm) {
 | 
			
		||||
				parameters = parseHeader(cm, parameters)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return append(parameters, sp)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user