|  | @@ -175,35 +175,35 @@ func (g *OpenAPIv3Generator) buildDocumentV3() *v3.Document {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  		if path.Value.Get != nil && len(path.Value.Get.Servers) == 1 {
 |  |  		if path.Value.Get != nil && len(path.Value.Get.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Get.Servers[0].Url)
 |  |  			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 {
 |  |  		if path.Value.Post != nil && len(path.Value.Post.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Post.Servers[0].Url)
 |  |  			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 {
 |  |  		if path.Value.Put != nil && len(path.Value.Put.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Put.Servers[0].Url)
 |  |  			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 {
 |  |  		if path.Value.Delete != nil && len(path.Value.Delete.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Delete.Servers[0].Url)
 |  |  			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 {
 |  |  		if path.Value.Patch != nil && len(path.Value.Patch.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Patch.Servers[0].Url)
 |  |  			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 {
 |  |  		if path.Value.Head != nil && len(path.Value.Head.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Head.Servers[0].Url)
 |  |  			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 {
 |  |  		if path.Value.Options != nil && len(path.Value.Options.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Options.Servers[0].Url)
 |  |  			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 {
 |  |  		if path.Value.Trace != nil && len(path.Value.Trace.Servers) == 1 {
 | 
											
												
													
														|  |  			servers = appendUnique(servers, path.Value.Trace.Servers[0].Url)
 |  |  			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 {
 |  |  		if len(servers) == 1 {
 | 
											
										
											
												
													
														|  | @@ -275,6 +275,93 @@ func (g *OpenAPIv3Generator) buildDocumentV3() *v3.Document {
 | 
											
												
													
														|  |  		})
 |  |  		})
 | 
											
												
													
														|  |  		d.Components.Schemas.AdditionalProperties = pairs
 |  |  		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
 |  |  	return d
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 |