Generator-Metadata.swift 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright 2021, gRPC Authors All rights reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. import SwiftProtobuf
  17. import SwiftProtobufPluginLibrary
  18. extension Generator {
  19. internal func printServerMetadata() {
  20. self.printMetadata(server: true)
  21. }
  22. internal func printClientMetadata() {
  23. self.printMetadata(server: false)
  24. }
  25. private func printMetadata(server: Bool) {
  26. let enumName = server ? self.serviceServerMetadata : self.serviceClientMetadata
  27. self.withIndentation("\(self.access) enum \(enumName)", braces: .curly) {
  28. self.println("\(self.access) static let serviceDescriptor = GRPCServiceDescriptor(")
  29. self.withIndentation {
  30. self.println("name: \(quoted(self.service.name)),")
  31. self.println("fullName: \(quoted(self.servicePath)),")
  32. self.println("methods: [")
  33. for method in self.service.methods {
  34. self.method = method
  35. self.withIndentation {
  36. self.println("\(enumName).Methods.\(self.methodFunctionName),")
  37. }
  38. }
  39. self.println("]")
  40. }
  41. self.println(")")
  42. self.println()
  43. self.withIndentation("\(self.access) enum Methods", braces: .curly) {
  44. for (offset, method) in self.service.methods.enumerated() {
  45. self.method = method
  46. self.println(
  47. "\(self.access) static let \(self.methodFunctionName) = GRPCMethodDescriptor("
  48. )
  49. self.withIndentation {
  50. self.println("name: \(quoted(self.method.name)),")
  51. self.println("path: \(quoted(self.methodPath)),")
  52. self.println("type: \(streamingType(self.method).asGRPCCallTypeCase)")
  53. }
  54. self.println(")")
  55. if (offset + 1) < self.service.methods.count {
  56. self.println()
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. extension Generator {
  64. internal var serviceServerMetadata: String {
  65. return nameForPackageService(self.file, self.service) + "ServerMetadata"
  66. }
  67. internal var serviceClientMetadata: String {
  68. return nameForPackageService(self.file, self.service) + "ClientMetadata"
  69. }
  70. internal var methodPathUsingClientMetadata: String {
  71. return "\(self.serviceClientMetadata).Methods.\(self.methodFunctionName).path"
  72. }
  73. }