@@ -18,11 +18,12 @@ internal import SwiftProtobuf
18
18
package import SwiftProtobufPluginLibrary
19
19
20
20
package import struct GRPCCodeGen. CodeGenerationRequest
21
+ package import struct GRPCCodeGen. CodeGenerator
21
22
package import struct GRPCCodeGen. Dependency
22
23
package import struct GRPCCodeGen. MethodDescriptor
23
- package import struct GRPCCodeGen. Name
24
+ package import struct GRPCCodeGen. MethodName
24
25
package import struct GRPCCodeGen. ServiceDescriptor
25
- package import struct GRPCCodeGen. SourceGenerator
26
+ package import struct GRPCCodeGen. ServiceName
26
27
27
28
#if canImport(FoundationEssentials)
28
29
internal import struct FoundationEssentials. IndexPath
@@ -34,12 +35,12 @@ internal import struct Foundation.IndexPath
34
35
package struct ProtobufCodeGenParser {
35
36
let extraModuleImports : [ String ]
36
37
let protoToModuleMappings : ProtoFileToModuleMappings
37
- let accessLevel : SourceGenerator . Config . AccessLevel
38
+ let accessLevel : CodeGenerator . Config . AccessLevel
38
39
39
40
package init (
40
41
protoFileModuleMappings: ProtoFileToModuleMappings ,
41
42
extraModuleImports: [ String ] ,
42
- accessLevel: SourceGenerator . Config . AccessLevel
43
+ accessLevel: CodeGenerator . Config . AccessLevel
43
44
) {
44
45
self . extraModuleImports = extraModuleImports
45
46
self . protoToModuleMappings = protoFileModuleMappings
@@ -69,12 +70,6 @@ package struct ProtobufCodeGenParser {
69
70
// https://github.com/grpc/grpc-swift
70
71
71
72
"""
72
- let lookupSerializer : ( String ) -> String = { messageType in
73
- " GRPCProtobuf.ProtobufSerializer< \( messageType) >() "
74
- }
75
- let lookupDeserializer : ( String ) -> String = { messageType in
76
- " GRPCProtobuf.ProtobufDeserializer< \( messageType) >() "
77
- }
78
73
79
74
let services = descriptor. services. map {
80
75
GRPCCodeGen . ServiceDescriptor (
@@ -90,8 +85,12 @@ package struct ProtobufCodeGenParser {
90
85
leadingTrivia: header + leadingTrivia,
91
86
dependencies: self . codeDependencies ( file: descriptor) ,
92
87
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
+ }
95
94
)
96
95
}
97
96
}
@@ -147,22 +146,17 @@ extension GRPCCodeGen.ServiceDescriptor {
147
146
protobufNamer: protobufNamer
148
147
)
149
148
}
150
- let name = Name (
151
- base: descriptor. name,
149
+
150
+ let typePrefix = protobufNamer. typePrefix ( forFile: file)
151
+ let name = ServiceName (
152
+ identifyingName: descriptor. fullName,
152
153
// 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
155
156
)
156
157
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
- )
164
158
let documentation = descriptor. protoSourceComments ( )
165
- self . init ( documentation: documentation, name: name, namespace : namespace , methods: methods)
159
+ self . init ( documentation: documentation, name: name, methods: methods)
166
160
}
167
161
}
168
162
@@ -171,11 +165,11 @@ extension GRPCCodeGen.MethodDescriptor {
171
165
descriptor: SwiftProtobufPluginLibrary . MethodDescriptor ,
172
166
protobufNamer: SwiftProtobufNamer
173
167
) {
174
- let name = Name (
175
- base : descriptor. name,
168
+ let name = MethodName (
169
+ identifyingName : descriptor. name,
176
170
// 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)
179
173
)
180
174
let documentation = descriptor. protoSourceComments ( )
181
175
self . init (
@@ -208,17 +202,19 @@ extension FileDescriptor {
208
202
}
209
203
210
204
extension 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
219
208
NamingUtils . toLowerCamelCase ( String ( component) )
220
209
}
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
+ }
222
218
}
223
219
}
224
220
0 commit comments