@@ -18,11 +18,12 @@ internal import SwiftProtobuf
1818package import SwiftProtobufPluginLibrary
1919
2020package import struct GRPCCodeGen. CodeGenerationRequest
21+ package import struct GRPCCodeGen. CodeGenerator
2122package import struct GRPCCodeGen. Dependency
2223package import struct GRPCCodeGen. MethodDescriptor
23- package import struct GRPCCodeGen. Name
24+ package import struct GRPCCodeGen. MethodName
2425package import struct GRPCCodeGen. ServiceDescriptor
25- package import struct GRPCCodeGen. SourceGenerator
26+ package import struct GRPCCodeGen. ServiceName
2627
2728#if canImport(FoundationEssentials)
2829internal import struct FoundationEssentials. IndexPath
@@ -34,12 +35,12 @@ internal import struct Foundation.IndexPath
3435package struct ProtobufCodeGenParser {
3536 let extraModuleImports : [ String ]
3637 let protoToModuleMappings : ProtoFileToModuleMappings
37- let accessLevel : SourceGenerator . Config . AccessLevel
38+ let accessLevel : CodeGenerator . Config . AccessLevel
3839
3940 package init (
4041 protoFileModuleMappings: ProtoFileToModuleMappings ,
4142 extraModuleImports: [ String ] ,
42- accessLevel: SourceGenerator . Config . AccessLevel
43+ accessLevel: CodeGenerator . Config . AccessLevel
4344 ) {
4445 self . extraModuleImports = extraModuleImports
4546 self . protoToModuleMappings = protoFileModuleMappings
@@ -69,12 +70,6 @@ package struct ProtobufCodeGenParser {
6970 // https://github.com/grpc/grpc-swift
7071
7172 """
72- let lookupSerializer : ( String ) -> String = { messageType in
73- " GRPCProtobuf.ProtobufSerializer< \( messageType) >() "
74- }
75- let lookupDeserializer : ( String ) -> String = { messageType in
76- " GRPCProtobuf.ProtobufDeserializer< \( messageType) >() "
77- }
7873
7974 let services = descriptor. services. map {
8075 GRPCCodeGen . ServiceDescriptor (
@@ -90,8 +85,12 @@ package struct ProtobufCodeGenParser {
9085 leadingTrivia: header + leadingTrivia,
9186 dependencies: self . codeDependencies ( file: descriptor) ,
9287 services: services,
93- lookupSerializer: lookupSerializer,
94- lookupDeserializer: lookupDeserializer
88+ makeSerializerCodeSnippet: { messageType in
89+ " GRPCProtobuf.ProtobufSerializer< \( messageType) >() "
90+ } ,
91+ makeDeserializerCodeSnippet: { messageType in
92+ " GRPCProtobuf.ProtobufDeserializer< \( messageType) >() "
93+ }
9594 )
9695 }
9796}
@@ -147,22 +146,17 @@ extension GRPCCodeGen.ServiceDescriptor {
147146 protobufNamer: protobufNamer
148147 )
149148 }
150- let name = Name (
151- base: descriptor. name,
149+
150+ let typePrefix = protobufNamer. typePrefix ( forFile: file)
151+ let name = ServiceName (
152+ identifyingName: descriptor. fullName,
152153 // The service name from the '.proto' file is expected to be in upper camel case
153- generatedUpperCase : descriptor. name,
154- generatedLowerCase : CamelCaser . toLowerCamelCase ( descriptor. name)
154+ typeName : typePrefix + descriptor. name,
155+ propertyName : protobufNamer . typePrefixProperty ( file : file ) + descriptor. name
155156 )
156157
157- // Packages that are based on the path of the '.proto' file usually
158- // contain dots. For example: "grpc.test".
159- let namespace = Name (
160- base: package ,
161- generatedUpperCase: protobufNamer. formattedUpperCasePackage ( file: file) ,
162- generatedLowerCase: protobufNamer. formattedLowerCasePackage ( file: file)
163- )
164158 let documentation = descriptor. protoSourceComments ( )
165- self . init ( documentation: documentation, name: name, namespace : namespace , methods: methods)
159+ self . init ( documentation: documentation, name: name, methods: methods)
166160 }
167161}
168162
@@ -171,11 +165,11 @@ extension GRPCCodeGen.MethodDescriptor {
171165 descriptor: SwiftProtobufPluginLibrary . MethodDescriptor ,
172166 protobufNamer: SwiftProtobufNamer
173167 ) {
174- let name = Name (
175- base : descriptor. name,
168+ let name = MethodName (
169+ identifyingName : descriptor. name,
176170 // The method name from the '.proto' file is expected to be in upper camel case
177- generatedUpperCase : descriptor. name,
178- generatedLowerCase : CamelCaser . toLowerCamelCase ( descriptor. name)
171+ typeName : descriptor. name,
172+ functionName : CamelCaser . toLowerCamelCase ( descriptor. name)
179173 )
180174 let documentation = descriptor. protoSourceComments ( )
181175 self . init (
@@ -208,17 +202,19 @@ extension FileDescriptor {
208202}
209203
210204extension SwiftProtobufNamer {
211- internal func formattedUpperCasePackage( file: FileDescriptor ) -> String {
212- let unformattedPackage = self . typePrefix ( forFile: file)
213- return unformattedPackage. trimTrailingUnderscores ( )
214- }
215-
216- internal func formattedLowerCasePackage( file: FileDescriptor ) -> String {
217- let upperCasePackage = self . formattedUpperCasePackage ( file: file)
218- let lowerCaseComponents = upperCasePackage. split ( separator: " _ " ) . map { component in
205+ internal func typePrefixProperty( file: FileDescriptor ) -> String {
206+ let typePrefix = self . typePrefix ( forFile: file)
207+ let lowercased = typePrefix. split ( separator: " _ " ) . map { component in
219208 NamingUtils . toLowerCamelCase ( String ( component) )
220209 }
221- return lowerCaseComponents. joined ( separator: " _ " )
210+
211+ let joined = lowercased. joined ( separator: " _ " )
212+ if typePrefix. hasSuffix ( " _ " ) , !joined. hasSuffix ( " _ " ) {
213+ // Add the trailing "_" if it was dropped.
214+ return joined + " _ "
215+ } else {
216+ return joined
217+ }
222218 }
223219}
224220
0 commit comments