Merge pull request #46 from htlhenry/main
fix(bug): embed defineStruct parse bug
This commit is contained in:
commit
5d03152780
@ -147,7 +147,6 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
|
|||||||
for _, m := range memberDefineStruct.Members {
|
for _, m := range memberDefineStruct.Members {
|
||||||
if strings.Contains(m.Tag, "header") {
|
if strings.Contains(m.Tag, "header") {
|
||||||
tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
|
tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
|
||||||
|
|
||||||
ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
|
ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
|
||||||
if !ok {
|
if !ok {
|
||||||
ftype = tempKind.String()
|
ftype = tempKind.String()
|
||||||
@ -205,59 +204,13 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
|
|||||||
if strings.Contains(member.Tag, "path") {
|
if strings.Contains(member.Tag, "path") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
tempKind := swaggerMapTypes[strings.Replace(member.Type.Name(), "[]", "", -1)]
|
if embedStruct, isEmbed := member.Type.(spec.DefineStruct); isEmbed {
|
||||||
|
for _, m := range embedStruct.Members {
|
||||||
ftype, format, ok := primitiveSchema(tempKind, member.Type.Name())
|
parameters = append(parameters, renderStruct(m))
|
||||||
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
|
continue
|
||||||
}
|
}
|
||||||
|
parameters = append(parameters, renderStruct(member))
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(member.Comment) > 0 {
|
|
||||||
sp.Description = strings.TrimLeft(member.Comment, "//")
|
|
||||||
}
|
|
||||||
|
|
||||||
parameters = append(parameters, sp)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -360,6 +313,62 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func renderStruct(member spec.Member) swaggerParameterObject {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(member.Comment) > 0 {
|
||||||
|
sp.Description = strings.TrimLeft(member.Comment, "//")
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp
|
||||||
|
}
|
||||||
|
|
||||||
func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.Type, refs refMap) {
|
func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.Type, refs refMap) {
|
||||||
for _, i2 := range p {
|
for _, i2 := range p {
|
||||||
schema := swaggerSchemaObject{
|
schema := swaggerSchemaObject{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user