@@ -23,16 +23,7 @@ import Foundation
23
23
import SwiftProtobuf
24
24
import SwiftProtobufPluginLibrary
25
25
26
- extension Google_Protobuf_Compiler_Version {
27
- fileprivate var versionString : String {
28
- if !suffix. isEmpty {
29
- return " \( major) . \( minor) . \( patch) . \( suffix) "
30
- }
31
- return " \( major) . \( minor) . \( patch) "
32
- }
33
- }
34
-
35
- struct GeneratorPlugin {
26
+ struct GeneratorPlugin : CodeGenerator {
36
27
private enum Mode {
37
28
case showHelp
38
29
case showVersion
@@ -154,7 +145,7 @@ struct GeneratorPlugin {
154
145
}
155
146
156
147
auditProtoCVersion ( request: request)
157
- let response = generate ( request: request)
148
+ let response = generateCode ( request: request, generator : self )
158
149
guard sendReply ( response: response) else { return 1 }
159
150
return 0
160
151
}
@@ -182,7 +173,7 @@ struct GeneratorPlugin {
182
173
continue
183
174
}
184
175
185
- let response = generate ( request: request)
176
+ let response = generateCode ( request: request, generator : self )
186
177
if response. hasError {
187
178
Stderr . print ( " Error while generating from \( p) - \( response. error) " )
188
179
result = 1
@@ -198,47 +189,32 @@ struct GeneratorPlugin {
198
189
return result
199
190
}
200
191
201
- private func generate(
202
- request: Google_Protobuf_Compiler_CodeGeneratorRequest
203
- ) -> Google_Protobuf_Compiler_CodeGeneratorResponse {
204
- let options : GeneratorOptions
205
- do {
206
- options = try GeneratorOptions ( parameter: request. parameter)
207
- } catch GenerationError . unknownParameter( let name) {
208
- return Google_Protobuf_Compiler_CodeGeneratorResponse (
209
- error: " Unknown generation parameter ' \( name) ' " )
210
- } catch GenerationError . invalidParameterValue( let name, let value) {
211
- return Google_Protobuf_Compiler_CodeGeneratorResponse (
212
- error: " Unknown value for generation parameter ' \( name) ': ' \( value) ' " )
213
- } catch GenerationError . wrappedError( let message, let e) {
214
- return Google_Protobuf_Compiler_CodeGeneratorResponse ( error: " \( message) : \( e) " )
215
- } catch let e {
216
- return Google_Protobuf_Compiler_CodeGeneratorResponse (
217
- error: " Internal Error parsing request options: \( e) " )
218
- }
219
-
220
- let descriptorSet = DescriptorSet ( protos: request. protoFile)
192
+ func generate(
193
+ files: [ SwiftProtobufPluginLibrary . FileDescriptor ] ,
194
+ parameter: CodeGeneratorParameter ,
195
+ protoCompilerContext: SwiftProtobufPluginLibrary . ProtoCompilerContext ,
196
+ generatorOutputs: SwiftProtobufPluginLibrary . GeneratorOutputs
197
+ ) throws {
198
+ let options = try GeneratorOptions ( parameter: parameter)
221
199
222
200
var errorString : String ? = nil
223
- var responseFiles : [ Google_Protobuf_Compiler_CodeGeneratorResponse . File ] = [ ]
224
- for name in request. fileToGenerate {
225
- let fileDescriptor = descriptorSet. fileDescriptor ( named: name) !
201
+ for fileDescriptor in files {
226
202
let fileGenerator = FileGenerator ( fileDescriptor: fileDescriptor, generatorOptions: options)
227
203
var printer = CodePrinter ( addNewlines: true )
228
204
fileGenerator. generateOutputFile ( printer: & printer, errorString: & errorString)
229
205
if let errorString = errorString {
230
206
// If generating multiple files, scope the message with the file that triggered it.
231
- let fullError = request . fileToGenerate . count > 1 ? " \( name) : \( errorString) " : errorString
232
- return Google_Protobuf_Compiler_CodeGeneratorResponse ( error : fullError)
207
+ let fullError = files . count > 1 ? " \( fileDescriptor . name) : \( errorString) " : errorString
208
+ throw GenerationError . message ( message : fullError)
233
209
}
234
- responseFiles. append (
235
- Google_Protobuf_Compiler_CodeGeneratorResponse . File ( name: fileGenerator. outputFilename,
236
- content: printer. content) )
210
+ try generatorOutputs. add ( fileName: fileGenerator. outputFilename, contents: printer. content)
237
211
}
238
- return Google_Protobuf_Compiler_CodeGeneratorResponse ( files: responseFiles,
239
- supportedFeatures: [ . proto3Optional] )
240
212
}
241
213
214
+ var supportedFeatures : [ SwiftProtobufPluginLibrary . Google_Protobuf_Compiler_CodeGeneratorResponse . Feature ] = [
215
+ . proto3Optional,
216
+ ]
217
+
242
218
private func auditProtoCVersion( request: Google_Protobuf_Compiler_CodeGeneratorRequest ) {
243
219
guard request. hasCompilerVersion else {
244
220
Stderr . print ( " WARNING: unknown version of protoc, use 3.2.x or later to ensure JSON support is correct. " )
0 commit comments