@@ -60,6 +60,8 @@ func (g *Generator) addPathsToDoc(doc *openapi3.T, services []*protogen.Service)
6060
6161 security := make ([]* oapiv1.Security , 0 )
6262
63+ var servers openapi3.Servers
64+
6365 if serviceOptions .Host != "" {
6466 // Use service defined host.
6567 host = serviceOptions .Host
@@ -70,6 +72,19 @@ func (g *Generator) addPathsToDoc(doc *openapi3.T, services []*protogen.Service)
7072 }
7173
7274 doc .Servers = append (doc .Servers , server )
75+ servers = append (servers , server )
76+ }
77+
78+ if len (serviceOptions .Servers ) > 0 {
79+ for _ , serviceServer := range serviceOptions .Servers {
80+ server , err := NewServer (serviceServer .Url )
81+ if err != nil {
82+ return err
83+ }
84+
85+ doc .Servers = append (doc .Servers , server )
86+ servers = append (servers , server )
87+ }
7388 }
7489
7590 if serviceOptions .Prefix != "" {
@@ -138,6 +153,7 @@ func (g *Generator) addPathsToDoc(doc *openapi3.T, services []*protogen.Service)
138153 packageName : packageName ,
139154 serviceParameters : parameters ,
140155 security : security ,
156+ servers : servers ,
141157 })
142158 if err != nil {
143159 return err
@@ -244,6 +260,7 @@ type addOperationParams struct {
244260 method * protogen.Method
245261 serviceOptions * oapiv1.ServiceOptions
246262 host string
263+ servers openapi3.Servers
247264 contentType string
248265 tagName string
249266 pathPrefix string
@@ -255,7 +272,7 @@ type addOperationParams struct {
255272// addOperation creates an operation for a path and adds it.
256273// TODO: Break into smaller bits.
257274func (g * Generator ) addOperation (p addOperationParams ) error {
258- host := p .host
275+ servers := p .servers
259276 contentType := p .contentType
260277
261278 operationID := string (p .service .Desc .Name () + "_" + p .method .Desc .Name ())
@@ -272,8 +289,26 @@ func (g *Generator) addOperation(p addOperationParams) error {
272289 }
273290
274291 if methodOptions .Host != "" {
275- // Use service defined host.
276- host = methodOptions .Host
292+ server , err := NewServer (methodOptions .Host )
293+ if err != nil {
294+ return err
295+ }
296+ p .doc .Servers = append (p .doc .Servers , server )
297+ servers = append (servers , server )
298+ }
299+
300+ if len (methodOptions .Servers ) > 0 {
301+ // If defined at the method level, delete what came from service.
302+ servers = openapi3.Servers {}
303+ for _ , methodServer := range methodOptions .Servers {
304+ server , err := NewServer (methodServer .Url )
305+ if err != nil {
306+ return err
307+ }
308+
309+ p .doc .Servers = append (p .doc .Servers , server )
310+ servers = append (servers , server )
311+ }
277312 }
278313
279314 if methodOptions .ContentType != "" {
@@ -299,20 +334,13 @@ func (g *Generator) addOperation(p addOperationParams) error {
299334 }
300335 }
301336
302- // Append the defined host as a server. Duplicates are removed later.
303- server , err := NewServer (host )
304- if err != nil {
305- return err
306- }
307- p .doc .Servers = append (p .doc .Servers , server )
308-
309337 var methodPath , methodName string
310338
311339 op := & openapi3.Operation {
312340 Tags : []string {p .tagName },
313341 Description : description ,
314342 OperationID : operationID ,
315- Servers : & openapi3. Servers { server } ,
343+ Servers : & servers ,
316344 Deprecated : methodOptions .Deprecated ,
317345 Responses : make (openapi3.Responses ),
318346 Summary : methodOptions .Summary ,
0 commit comments