|
|
@@ -175,35 +175,35 @@ func (g *OpenAPIv3Generator) buildDocumentV3() *v3.Document {
|
|
|
|
|
|
if path.Value.Get != nil && len(path.Value.Get.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Get.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Get.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Get.Servers[0].Url)
|
|
|
}
|
|
|
if path.Value.Post != nil && len(path.Value.Post.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Post.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Post.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Post.Servers[0].Url)
|
|
|
}
|
|
|
if path.Value.Put != nil && len(path.Value.Put.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Put.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Put.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Put.Servers[0].Url)
|
|
|
}
|
|
|
if path.Value.Delete != nil && len(path.Value.Delete.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Delete.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Delete.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Delete.Servers[0].Url)
|
|
|
}
|
|
|
if path.Value.Patch != nil && len(path.Value.Patch.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Patch.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Patch.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Patch.Servers[0].Url)
|
|
|
}
|
|
|
if path.Value.Head != nil && len(path.Value.Head.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Head.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Head.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Head.Servers[0].Url)
|
|
|
}
|
|
|
if path.Value.Options != nil && len(path.Value.Options.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Options.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Options.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Options.Servers[0].Url)
|
|
|
}
|
|
|
if path.Value.Trace != nil && len(path.Value.Trace.Servers) == 1 {
|
|
|
servers = appendUnique(servers, path.Value.Trace.Servers[0].Url)
|
|
|
- allServers = appendUnique(servers, path.Value.Trace.Servers[0].Url)
|
|
|
+ allServers = appendUnique(allServers, path.Value.Trace.Servers[0].Url)
|
|
|
}
|
|
|
|
|
|
if len(servers) == 1 {
|
|
|
@@ -275,6 +275,93 @@ func (g *OpenAPIv3Generator) buildDocumentV3() *v3.Document {
|
|
|
})
|
|
|
d.Components.Schemas.AdditionalProperties = pairs
|
|
|
}
|
|
|
+ // Deduplicate and sort security schemes.
|
|
|
+ if d.Components.SecuritySchemes != nil && d.Components.SecuritySchemes.AdditionalProperties != nil {
|
|
|
+ seen := make(map[string]bool)
|
|
|
+ unique := make([]*v3.NamedSecuritySchemeOrReference, 0)
|
|
|
+ for _, scheme := range d.Components.SecuritySchemes.AdditionalProperties {
|
|
|
+ if !seen[scheme.Name] {
|
|
|
+ seen[scheme.Name] = true
|
|
|
+ unique = append(unique, scheme)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sort.Slice(unique, func(i, j int) bool {
|
|
|
+ return unique[i].Name < unique[j].Name
|
|
|
+ })
|
|
|
+ d.Components.SecuritySchemes.AdditionalProperties = unique
|
|
|
+ }
|
|
|
+ // Deduplicate and sort responses.
|
|
|
+ if d.Components.Responses != nil && d.Components.Responses.AdditionalProperties != nil {
|
|
|
+ seen := make(map[string]bool)
|
|
|
+ unique := make([]*v3.NamedResponseOrReference, 0)
|
|
|
+ for _, resp := range d.Components.Responses.AdditionalProperties {
|
|
|
+ if !seen[resp.Name] {
|
|
|
+ seen[resp.Name] = true
|
|
|
+ unique = append(unique, resp)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sort.Slice(unique, func(i, j int) bool {
|
|
|
+ return unique[i].Name < unique[j].Name
|
|
|
+ })
|
|
|
+ d.Components.Responses.AdditionalProperties = unique
|
|
|
+ }
|
|
|
+ // Deduplicate and sort parameters.
|
|
|
+ if d.Components.Parameters != nil && d.Components.Parameters.AdditionalProperties != nil {
|
|
|
+ seen := make(map[string]bool)
|
|
|
+ unique := make([]*v3.NamedParameterOrReference, 0)
|
|
|
+ for _, param := range d.Components.Parameters.AdditionalProperties {
|
|
|
+ if !seen[param.Name] {
|
|
|
+ seen[param.Name] = true
|
|
|
+ unique = append(unique, param)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sort.Slice(unique, func(i, j int) bool {
|
|
|
+ return unique[i].Name < unique[j].Name
|
|
|
+ })
|
|
|
+ d.Components.Parameters.AdditionalProperties = unique
|
|
|
+ }
|
|
|
+ // Deduplicate and sort request bodies.
|
|
|
+ if d.Components.RequestBodies != nil && d.Components.RequestBodies.AdditionalProperties != nil {
|
|
|
+ seen := make(map[string]bool)
|
|
|
+ unique := make([]*v3.NamedRequestBodyOrReference, 0)
|
|
|
+ for _, body := range d.Components.RequestBodies.AdditionalProperties {
|
|
|
+ if !seen[body.Name] {
|
|
|
+ seen[body.Name] = true
|
|
|
+ unique = append(unique, body)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sort.Slice(unique, func(i, j int) bool {
|
|
|
+ return unique[i].Name < unique[j].Name
|
|
|
+ })
|
|
|
+ d.Components.RequestBodies.AdditionalProperties = unique
|
|
|
+ }
|
|
|
+ // Deduplicate and sort headers.
|
|
|
+ if d.Components.Headers != nil && d.Components.Headers.AdditionalProperties != nil {
|
|
|
+ seen := make(map[string]bool)
|
|
|
+ unique := make([]*v3.NamedHeaderOrReference, 0)
|
|
|
+ for _, header := range d.Components.Headers.AdditionalProperties {
|
|
|
+ if !seen[header.Name] {
|
|
|
+ seen[header.Name] = true
|
|
|
+ unique = append(unique, header)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sort.Slice(unique, func(i, j int) bool {
|
|
|
+ return unique[i].Name < unique[j].Name
|
|
|
+ })
|
|
|
+ d.Components.Headers.AdditionalProperties = unique
|
|
|
+ }
|
|
|
+ // Deduplicate servers by URL.
|
|
|
+ if d.Servers != nil && len(d.Servers) > 0 {
|
|
|
+ seen := make(map[string]bool)
|
|
|
+ unique := make([]*v3.Server, 0)
|
|
|
+ for _, server := range d.Servers {
|
|
|
+ if !seen[server.Url] {
|
|
|
+ seen[server.Url] = true
|
|
|
+ unique = append(unique, server)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ d.Servers = unique
|
|
|
+ }
|
|
|
return d
|
|
|
}
|
|
|
|