Skip to content

Commit 1e92fc8

Browse files
authored
Improve naming of request/response types (#2076)
Motivation: The names of the request/response types are quite stilted. We can improve them by removing the namespacing and by removing the explicit "Single". Modifications: - `ServerRequest.Single` -> `ServerRequest` - `ServerRequest.Stream` -> `StreamingServerRequest` - `ServerResponse.Single` -> `ServerResponse` - `ServerResponse.Stream` -> `StreamingServerResponse` - `ClientRequest.Single` -> `ClientRequest` - `ClientRequest.Stream` -> `StreamingClientRequest` - `ClientResponse.Single` -> `ClientResponse` - `ClientResponse.Stream` -> `StreamingClientResponse` Result: Better naming
1 parent cfa6743 commit 1e92fc8

File tree

47 files changed

+1000
-1029
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1000
-1029
lines changed

Sources/GRPCCodeGen/Internal/Translator/ClientCodeTranslator.swift

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,19 @@
2525
/// @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2626
/// public protocol Foo_BarClientProtocol: Sendable {
2727
/// func baz<R>(
28-
/// request: GRPCCore.ClientRequest.Single<Foo_Bar_Input>,
28+
/// request: GRPCCore.ClientRequest<Foo_Bar_Input>,
2929
/// serializer: some GRPCCore.MessageSerializer<Foo_Bar_Input>,
3030
/// deserializer: some GRPCCore.MessageDeserializer<Foo_Bar_Output>,
3131
/// options: GRPCCore.CallOptions = .defaults,
32-
/// _ body: @Sendable @escaping (GRPCCore.ClientResponse.Single<Foo_Bar_Output>) async throws -> R
32+
/// _ body: @Sendable @escaping (GRPCCore.ClientResponse<Foo_Bar_Output>) async throws -> R
3333
/// ) async throws -> R where R: Sendable
3434
/// }
3535
/// @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
3636
/// extension Foo_Bar.ClientProtocol {
3737
/// public func baz<R>(
38-
/// request: GRPCCore.ClientRequest.Single<Foo_Bar_Input>,
38+
/// request: GRPCCore.ClientRequest<Foo_Bar_Input>,
3939
/// options: GRPCCore.CallOptions = .defaults,
40-
/// _ body: @Sendable @escaping (GRPCCore.ClientResponse.Single<Foo_Bar_Output>) async throws -> R = {
40+
/// _ body: @Sendable @escaping (GRPCCore.ClientResponse<Foo_Bar_Output>) async throws -> R = {
4141
/// try $0.message
4242
/// }
4343
/// ) async throws -> R where R: Sendable {
@@ -56,11 +56,11 @@
5656
/// self.client = client
5757
/// }
5858
/// public func methodA<R>(
59-
/// request: GRPCCore.ClientRequest.Stream<Foo_Bar_Input>,
59+
/// request: GRPCCore.StreamingClientRequest<Foo_Bar_Input>,
6060
/// serializer: some GRPCCore.MessageSerializer<Foo_Bar_Input>,
6161
/// deserializer: some GRPCCore.MessageDeserializer<Foo_Bar_Output>,
6262
/// options: GRPCCore.CallOptions = .defaults,
63-
/// _ body: @Sendable @escaping (GRPCCore.ClientResponse.Single<Foo_Bar_Output>) async throws -> R = {
63+
/// _ body: @Sendable @escaping (GRPCCore.ClientResponse<Foo_Bar_Output>) async throws -> R = {
6464
/// try $0.message
6565
/// }
6666
/// ) async throws -> R where R: Sendable {
@@ -263,13 +263,13 @@ extension ClientCodeTranslator {
263263

264264
// All methods have a response handler.
265265
var responseHandler = ParameterDescription(label: "onResponse", name: "handleResponse")
266-
let responseKind = method.isOutputStreaming ? "Stream" : "Single"
266+
let responseKind = method.isOutputStreaming ? "Streaming" : ""
267267
responseHandler.type = .closure(
268268
ClosureSignatureDescription(
269269
parameters: [
270270
ParameterDescription(
271271
type: .generic(
272-
wrapper: .member(["GRPCCore", "ClientResponse", responseKind]),
272+
wrapper: .member(["GRPCCore", "\(responseKind)ClientResponse"]),
273273
wrapped: .member(method.outputType)
274274
)
275275
)
@@ -299,21 +299,21 @@ extension ClientCodeTranslator {
299299
) -> [CodeBlock] {
300300
// Produces the following:
301301
//
302-
// let request = GRPCCore.ClientRequest.Single<Input>(message: message, metadata: metadata)
302+
// let request = GRPCCore.ClientRequest<Input>(message: message, metadata: metadata)
303303
// return try await method(request: request, options: options, responseHandler: responseHandler)
304304
//
305305
// or:
306306
//
307-
// let request = GRPCCore.ClientRequest.Stream<Input>(metadata: metadata, producer: writer)
307+
// let request = GRPCCore.StreamingClientRequest<Input>(metadata: metadata, producer: writer)
308308
// return try await method(request: request, options: options, responseHandler: responseHandler)
309309

310310
// First, make the init for the ClientRequest
311-
let requestType = method.isInputStreaming ? "Stream" : "Single"
311+
let requestType = method.isInputStreaming ? "Streaming" : ""
312312
var requestInit = FunctionCallDescription(
313313
calledExpression: .identifier(
314314
.type(
315315
.generic(
316-
wrapper: .member(["GRPCCore", "ClientRequest", requestType]),
316+
wrapper: .member(["GRPCCore", "\(requestType)ClientRequest"]),
317317
wrapped: .member(method.inputType)
318318
)
319319
)
@@ -490,9 +490,10 @@ extension ClientCodeTranslator {
490490
for method: CodeGenerationRequest.ServiceDescriptor.MethodDescriptor,
491491
in service: CodeGenerationRequest.ServiceDescriptor
492492
) -> ParameterDescription {
493-
let requestType = method.isInputStreaming ? "Stream" : "Single"
493+
let requestType = method.isInputStreaming ? "Streaming" : ""
494494
let clientRequestType = ExistingTypeDescription.member([
495-
"GRPCCore", "ClientRequest", requestType,
495+
"GRPCCore",
496+
"\(requestType)ClientRequest",
496497
])
497498
return ParameterDescription(
498499
label: "request",
@@ -538,9 +539,9 @@ extension ClientCodeTranslator {
538539
in service: CodeGenerationRequest.ServiceDescriptor,
539540
includeDefaultResponseHandler: Bool
540541
) -> ParameterDescription {
541-
let clientStreaming = method.isOutputStreaming ? "Stream" : "Single"
542+
let clientStreaming = method.isOutputStreaming ? "Streaming" : ""
542543
let closureParameterType = ExistingTypeDescription.generic(
543-
wrapper: .member(["GRPCCore", "ClientResponse", clientStreaming]),
544+
wrapper: .member(["GRPCCore", "\(clientStreaming)ClientResponse"]),
544545
wrapped: .member(method.outputType)
545546
)
546547

Sources/GRPCCodeGen/Internal/Translator/ServerCodeTranslator.swift

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
/// @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2626
/// public protocol Foo_BarStreamingServiceProtocol: GRPCCore.RegistrableRPCService {
2727
/// func baz(
28-
/// request: GRPCCore.ServerRequest.Stream<Foo_Bar_Input>
29-
/// ) async throws -> GRPCCore.ServerResponse.Stream<Foo_Bar_Output>
28+
/// request: GRPCCore.StreamingServerRequest<Foo_Bar_Input>
29+
/// ) async throws -> GRPCCore.StreamingServerResponse<Foo_Bar_Output>
3030
/// }
3131
/// // Conformance to `GRPCCore.RegistrableRPCService`.
3232
/// @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
@@ -43,17 +43,17 @@
4343
/// @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
4444
/// public protocol Foo_BarServiceProtocol: Foo_Bar.StreamingServiceProtocol {
4545
/// func baz(
46-
/// request: GRPCCore.ServerRequest.Single<Foo_Bar_Input>
47-
/// ) async throws -> GRPCCore.ServerResponse.Single<Foo_Bar_Output>
46+
/// request: GRPCCore.ServerRequest<Foo_Bar_Input>
47+
/// ) async throws -> GRPCCore.ServerResponse<Foo_Bar_Output>
4848
/// }
4949
/// // Partial conformance to `Foo_BarStreamingServiceProtocol`.
5050
/// @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
5151
/// extension Foo_Bar.ServiceProtocol {
5252
/// public func baz(
53-
/// request: GRPCCore.ServerRequest.Stream<Foo_Bar_Input>
54-
/// ) async throws -> GRPCCore.ServerResponse.Stream<Foo_Bar_Output> {
55-
/// let response = try await self.baz(request: GRPCCore.ServerRequest.Single(stream: request))
56-
/// return GRPCCore.ServerResponse.Stream(single: response)
53+
/// request: GRPCCore.StreamingServerRequest<Foo_Bar_Input>
54+
/// ) async throws -> GRPCCore.StreamingServerResponse<Foo_Bar_Output> {
55+
/// let response = try await self.baz(request: GRPCCore.ServerRequest(stream: request))
56+
/// return GRPCCore.StreamingServerResponse(single: response)
5757
/// }
5858
/// }
5959
///```
@@ -147,7 +147,7 @@ extension ServerCodeTranslator {
147147
.init(
148148
label: "request",
149149
type: .generic(
150-
wrapper: .member(["GRPCCore", "ServerRequest", "Stream"]),
150+
wrapper: .member(["GRPCCore", "StreamingServerRequest"]),
151151
wrapped: .member(method.inputType)
152152
)
153153
),
@@ -156,7 +156,7 @@ extension ServerCodeTranslator {
156156
keywords: [.async, .throws],
157157
returnType: .identifierType(
158158
.generic(
159-
wrapper: .member(["GRPCCore", "ServerResponse", "Stream"]),
159+
wrapper: .member(["GRPCCore", "StreamingServerResponse"]),
160160
wrapped: .member(method.outputType)
161161
)
162162
)
@@ -313,8 +313,8 @@ extension ServerCodeTranslator {
313313
in service: CodeGenerationRequest.ServiceDescriptor,
314314
accessModifier: AccessModifier? = nil
315315
) -> Declaration {
316-
let inputStreaming = method.isInputStreaming ? "Stream" : "Single"
317-
let outputStreaming = method.isOutputStreaming ? "Stream" : "Single"
316+
let inputStreaming = method.isInputStreaming ? "Streaming" : ""
317+
let outputStreaming = method.isOutputStreaming ? "Streaming" : ""
318318

319319
let functionSignature = FunctionSignatureDescription(
320320
accessModifier: accessModifier,
@@ -324,7 +324,7 @@ extension ServerCodeTranslator {
324324
label: "request",
325325
type:
326326
.generic(
327-
wrapper: .member(["GRPCCore", "ServerRequest", inputStreaming]),
327+
wrapper: .member(["GRPCCore", "\(inputStreaming)ServerRequest"]),
328328
wrapped: .member(method.inputType)
329329
)
330330
),
@@ -333,7 +333,7 @@ extension ServerCodeTranslator {
333333
keywords: [.async, .throws],
334334
returnType: .identifierType(
335335
.generic(
336-
wrapper: .member(["GRPCCore", "ServerResponse", outputStreaming]),
336+
wrapper: .member(["GRPCCore", "\(outputStreaming)ServerResponse"]),
337337
wrapped: .member(method.outputType)
338338
)
339339
)
@@ -391,12 +391,7 @@ extension ServerCodeTranslator {
391391
if !method.isInputStreaming {
392392
// Transform the streaming request into a unary request.
393393
serverRequest = Expression.functionCall(
394-
calledExpression: .memberAccess(
395-
MemberAccessDescription(
396-
left: .identifierPattern("GRPCCore.ServerRequest"),
397-
right: "Single"
398-
)
399-
),
394+
calledExpression: .identifierType(.member(["GRPCCore", "ServerRequest"])),
400395
arguments: [
401396
FunctionArgumentDescription(label: "stream", expression: .identifierPattern("request"))
402397
]
@@ -433,12 +428,7 @@ extension ServerCodeTranslator {
433428
// Transforming the unary response into a streaming one.
434429
if !method.isOutputStreaming {
435430
returnValue = .functionCall(
436-
calledExpression: .memberAccess(
437-
MemberAccessDescription(
438-
left: .identifierType(.member(["GRPCCore", "ServerResponse"])),
439-
right: "Stream"
440-
)
441-
),
431+
calledExpression: .identifier(.type(.member(["GRPCCore", "StreamingServerResponse"]))),
442432
arguments: [
443433
(FunctionArgumentDescription(label: "single", expression: .identifierPattern("response")))
444434
]

Sources/GRPCCore/Call/Client/ClientInterceptor.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@
4040
/// let fetchMetadata: @Sendable () async -> String
4141
///
4242
/// func intercept<Input: Sendable, Output: Sendable>(
43-
/// request: ClientRequest.Stream<Input>,
43+
/// request: StreamingClientRequest<Input>,
4444
/// context: ClientContext,
4545
/// next: @Sendable (
46-
/// _ request: ClientRequest.Stream<Input>,
46+
/// _ request: StreamingClientRequest<Input>,
4747
/// _ context: ClientContext
48-
/// ) async throws -> ClientResponse.Stream<Output>
49-
/// ) async throws -> ClientResponse.Stream<Output> {
48+
/// ) async throws -> StreamingClientResponse<Output>
49+
/// ) async throws -> StreamingClientResponse<Output> {
5050
/// // Fetch the metadata value and attach it.
5151
/// let value = await self.fetchMetadata()
5252
/// var request = request
@@ -65,13 +65,13 @@
6565
/// ```swift
6666
/// struct LoggingClientInterceptor: ClientInterceptor {
6767
/// func intercept<Input: Sendable, Output: Sendable>(
68-
/// request: ClientRequest.Stream<Input>,
68+
/// request: StreamingClientRequest<Input>,
6969
/// context: ClientContext,
7070
/// next: @Sendable (
71-
/// _ request: ClientRequest.Stream<Input>,
71+
/// _ request: StreamingClientRequest<Input>,
7272
/// _ context: ClientContext
73-
/// ) async throws -> ClientResponse.Stream<Output>
74-
/// ) async throws -> ClientResponse.Stream<Output> {
73+
/// ) async throws -> StreamingClientResponse<Output>
74+
/// ) async throws -> StreamingClientResponse<Output> {
7575
/// print("Invoking method '\(context.descriptor)'")
7676
/// let response = try await next(request, context)
7777
///
@@ -100,11 +100,11 @@ public protocol ClientInterceptor: Sendable {
100100
/// interceptor in the chain.
101101
/// - Returns: A response object.
102102
func intercept<Input: Sendable, Output: Sendable>(
103-
request: ClientRequest.Stream<Input>,
103+
request: StreamingClientRequest<Input>,
104104
context: ClientContext,
105105
next: (
106-
_ request: ClientRequest.Stream<Input>,
106+
_ request: StreamingClientRequest<Input>,
107107
_ context: ClientContext
108-
) async throws -> ClientResponse.Stream<Output>
109-
) async throws -> ClientResponse.Stream<Output>
108+
) async throws -> StreamingClientResponse<Output>
109+
) async throws -> StreamingClientResponse<Output>
110110
}

0 commit comments

Comments
 (0)