Skip to content

Commit 8df3684

Browse files
author
Josh
committed
Add servers to generator
1 parent 332b37e commit 8df3684

File tree

6 files changed

+69
-14
lines changed

6 files changed

+69
-14
lines changed

internal/generator/generator.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,16 @@ func addFileServersToDoc(doc *openapi3.T, file *protogen.File) error {
302302
}
303303
doc.Servers = append(doc.Servers, server)
304304
}
305+
306+
if len(fileOptions.Servers) > 0 {
307+
for _, fileServer := range fileOptions.Servers {
308+
server, err := NewServer(fileServer.Url)
309+
if err != nil {
310+
return err
311+
}
312+
doc.Servers = append(doc.Servers, server)
313+
}
314+
}
305315
}
306316

307317
return nil

internal/generator/path.go

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
257274
func (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,

test/file_test.proto

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@ option go_package = "github.com/technicallyjosh/protoc-gen-openapi/test_api";
99
option (oapi.v1.file) = {
1010
host: "swagger.io"
1111

12+
servers: [
13+
{
14+
url: "swagger.one"
15+
},
16+
{
17+
url: "swagger.two"
18+
}
19+
]
20+
1221
security_schemes: {
1322
name: "bearer_auth"
1423
scheme: {

test/file_test_openapi.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ paths: { }
99

1010
servers:
1111
- url: https://swagger.io
12+
- url: https://swagger.one
13+
- url: https://swagger.two
1214

1315
components:
1416
responses:

test/method_test.proto

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ service TestService {
2323
rpc TestEmptyPost(TestEmptyPostRequest) returns (TestEmptyPostResponse) {
2424
option (oapi.v1.method) = {
2525
post: "TestEmptyPost"
26+
servers: [
27+
{
28+
url: "test.swagger.io"
29+
}
30+
]
2631
};
2732
};
2833
}

test/method_test_openapi.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ paths:
1313
content:
1414
application/json:
1515
schema:
16-
properties: {}
16+
properties: { }
1717
responses:
1818
'200':
1919
content:
2020
application/json:
2121
schema:
22-
properties: {}
22+
properties: { }
2323
description: ''
2424
default:
2525
$ref: '#/components/responses/default'
2626
servers:
27-
- url: https://api.swagger.io
27+
- url: https://test.swagger.io
2828
tags:
2929
- TestService
3030

@@ -47,6 +47,7 @@ components:
4747
servers:
4848
- url: https://swagger.io
4949
- url: https://api.swagger.io
50+
- url: https://test.swagger.io
5051

5152
tags:
5253
- name: TestService

0 commit comments

Comments
 (0)