Merge pull request #38 from csbzy/main

【需求】支持header和嵌套object
This commit is contained in:
MaxToby 2022-06-04 19:51:10 +08:00 committed by GitHub
commit 2c9cb292df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -141,6 +141,65 @@ 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
}
}
sp.Required = required
}
sp.Description = strings.TrimLeft(m.Comment, "//")
parameters = append(parameters, sp)
}
}
continue
}
}
if strings.ToUpper(route.Method) == http.MethodGet {
for _, member := range defineStruct.Members {
if strings.Contains(member.Tag, "path") {
@ -316,12 +375,33 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
if hasPathParameters(member) {
continue
}
kv := keyVal{Value: schemaOfField(member)}
kv.Key = member.Name
if tag, err := member.GetPropertyName(); err == nil {
kv.Key = tag
}
if kv.Key == ""{
memberStruct ,_ := member.Type.(spec.DefineStruct)
for _, m:=range memberStruct.Members{
if strings.Contains(m.Tag, "header") {
continue
}
mkv := keyVal{
Value:schemaOfField(m),
Key: m.Name,
}
if tag, err := m.GetPropertyName(); err == nil {
mkv.Key = tag
}
if schema.Properties == nil {
schema.Properties = &swaggerSchemaObjectProperties{}
}
*schema.Properties = append(*schema.Properties, mkv)
}
continue
}
if schema.Properties == nil {
schema.Properties = &swaggerSchemaObjectProperties{}
}