| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- * Copyright 2018, gRPC Authors All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import SwiftProtobufPluginLibrary
- class Generator {
- internal var options: GeneratorOptions
- private var printer: CodePrinter
- internal var file: FileDescriptor
- internal var service: ServiceDescriptor! // context during generation
- internal var method: MethodDescriptor! // context during generation
- internal let protobufNamer: SwiftProtobufNamer
- init(_ file: FileDescriptor, options: GeneratorOptions) {
- self.file = file
- self.options = options
- self.printer = CodePrinter()
- self.protobufNamer = SwiftProtobufNamer(
- currentFile: file,
- protoFileToModuleMappings: options.protoToModuleMappings)
- printMain()
- }
- public var code: String {
- return printer.content
- }
- internal func println(_ text: String = "") {
- printer.print(text)
- printer.print("\n")
- }
- internal func indent() {
- printer.indent()
- }
- internal func outdent() {
- printer.outdent()
- }
- private func printMain() {
- printer.print("""
- //
- // DO NOT EDIT.
- //
- // Generated by the protocol buffer compiler.
- // Source: \(file.name)
- //
- //
- // Copyright 2018, gRPC Authors All rights reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //\n
- """)
- let moduleNames = [
- "Foundation",
- "NIO",
- "NIOHTTP1",
- "GRPC",
- "SwiftProtobuf"
- ]
- for moduleName in (moduleNames + options.extraModuleImports).sorted() {
- println("import \(moduleName)")
- }
- // Build systems like Bazel will generate the Swift service definitions in a different module
- // than the rest of the protos defined in the same file (because they are generated by separate
- // build rules that invoke the separate generator plugins). So, we need to specify module
- // mappings to import the service protos as well as and any other proto modules that the file
- // imports.
- let moduleMappings = options.protoToModuleMappings
- if let serviceProtoModuleName = moduleMappings.moduleName(forFile: file) {
- println("import \(serviceProtoModuleName)")
- }
- for importedProtoModuleName in moduleMappings.neededModules(forFile: file) ?? [] {
- println("import \(importedProtoModuleName)")
- }
- println()
- if options.generateClient {
- for service in file.services {
- self.service = service
- printClient()
- }
- }
- println()
- if options.generateServer {
- for service in file.services {
- self.service = service
- printServer()
- }
- }
- }
- }
|