Skip to content

Commit 0375470

Browse files
authored
Merge pull request #230 from rebello95/server-client-options
Add server/client codegen options to protoc
2 parents 2a1a067 + ea1f7c8 commit 0375470

File tree

2 files changed

+44
-25
lines changed

2 files changed

+44
-25
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,21 @@ search path. Invoke them with commands like the following:
8888
By convention the `--swift_out` option invokes the `protoc-gen-swift`
8989
plugin and `--swiftgrpc_out` invokes `protoc-gen-swiftgrpc`.
9090

91+
#### Parameters
92+
To pass extra parameters to the plugin, use a comma-separated parameter list
93+
separated from the output directory by a colon.
94+
95+
| Flag | Values | Default | Description |
96+
|:-|:-|:-|:-|
97+
| `Visibility` | `Internal`/`Public` | `Internal` | ACL of generated code |
98+
| `Server` | `true`/`false` | `true` | Whether to generate server code |
99+
| `Client` | `true`/`false` | `true` | Whether to generate client code |
100+
| `TestStubs` | `true`/`false` | `false` | Whether to generate test stub code |
101+
102+
Example:
103+
104+
$ protoc <your proto> --swiftgrpc_out=Client=true,Server=false:.
105+
91106
### Building your project
92107

93108
Most `grpc-swift` development is done with the Swift Package Manager.

Sources/protoc-gen-swiftgrpc/options.swift

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,57 +31,61 @@ enum GenerationError: Error {
3131
}
3232
}
3333

34-
class GeneratorOptions {
34+
final class GeneratorOptions {
3535
enum Visibility: String {
36-
case Internal
37-
case Public
36+
case `internal` = "Internal"
37+
case `public` = "Public"
3838

3939
var sourceSnippet: String {
4040
switch self {
41-
case .Internal:
41+
case .internal:
4242
return "internal"
43-
case .Public:
43+
case .public:
4444
return "public"
4545
}
4646
}
4747
}
4848

49-
let visibility: Visibility
50-
let generateTestStubs: Bool
51-
let generateClient: Bool
52-
let generateServer: Bool
49+
private(set) var visibility = Visibility.internal
50+
private(set) var generateServer = true
51+
private(set) var generateClient = true
52+
private(set) var generateTestStubs = false
5353

5454
init(parameter: String?) throws {
55-
var visibility: Visibility = .Internal
56-
57-
var generateTestStubs = false
58-
5955
for pair in GeneratorOptions.parseParameter(string: parameter) {
6056
switch pair.key {
6157
case "Visibility":
6258
if let value = Visibility(rawValue: pair.value) {
6359
visibility = value
6460
} else {
65-
throw GenerationError.invalidParameterValue(name: pair.key,
66-
value: pair.value)
61+
throw GenerationError.invalidParameterValue(name: pair.key, value: pair.value)
62+
}
63+
64+
case "Server":
65+
if let value = Bool(pair.value) {
66+
generateServer = value
67+
} else {
68+
throw GenerationError.invalidParameterValue(name: pair.key, value: pair.value)
6769
}
70+
71+
case "Client":
72+
if let value = Bool(pair.value) {
73+
generateClient = value
74+
} else {
75+
throw GenerationError.invalidParameterValue(name: pair.key, value: pair.value)
76+
}
77+
6878
case "TestStubs":
69-
switch pair.value {
70-
case "true": generateTestStubs = true
71-
case "false": generateTestStubs = false
72-
default: throw GenerationError.invalidParameterValue(name: pair.key,
73-
value: pair.value)
79+
if let value = Bool(pair.value) {
80+
generateTestStubs = value
81+
} else {
82+
throw GenerationError.invalidParameterValue(name: pair.key, value: pair.value)
7483
}
7584

7685
default:
7786
throw GenerationError.unknownParameter(name: pair.key)
7887
}
7988
}
80-
81-
self.visibility = visibility
82-
self.generateTestStubs = generateTestStubs
83-
self.generateClient = true
84-
self.generateServer = true
8589
}
8690

8791
static func parseParameter(string: String?) -> [(key: String, value: String)] {

0 commit comments

Comments
 (0)