Skip to content

Commit 7d54144

Browse files
feat!: Remove onMessage callback
This is not necessary anymore, since you can just map the incoming AsyncStream
1 parent f1283d2 commit 7d54144

3 files changed

Lines changed: 36 additions & 44 deletions

File tree

Sources/GraphQLTransportWS/Client.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ public actor Client<InitPayload: Equatable & Codable> {
99
let onNext: (NextResponse, Client) async throws -> Void
1010
let onError: (ErrorResponse, Client) async throws -> Void
1111
let onComplete: (CompleteResponse, Client) async throws -> Void
12-
let onMessage: (String, Client) async throws -> Void
1312

1413
let encoder = GraphQLJSONEncoder()
1514
let decoder = JSONDecoder()
@@ -23,23 +22,19 @@ public actor Client<InitPayload: Equatable & Codable> {
2322
onConnectionAck: @escaping (ConnectionAckResponse, Client) async throws -> Void = { _, _ in },
2423
onNext: @escaping (NextResponse, Client) async throws -> Void = { _, _ in },
2524
onError: @escaping (ErrorResponse, Client) async throws -> Void = { _, _ in },
26-
onComplete: @escaping (CompleteResponse, Client) async throws -> Void = { _, _ in },
27-
onMessage: @escaping (String, Client) async throws -> Void = { _, _ in }
25+
onComplete: @escaping (CompleteResponse, Client) async throws -> Void = { _, _ in }
2826
) {
2927
self.messenger = messenger
3028
self.onConnectionAck = onConnectionAck
3129
self.onNext = onNext
3230
self.onError = onError
3331
self.onComplete = onComplete
34-
self.onMessage = onMessage
3532
}
3633

3734
/// Listen and react to the provided async sequence of server messages. This function will block until the stream is completed.
3835
/// - Parameter incoming: The server message sequence that the client should react to.
3936
public func listen<A: AsyncSequence & Sendable>(to incoming: A) async throws -> Void where A.Element == String {
4037
for try await message in incoming {
41-
try await onMessage(message, self)
42-
4338
// Detect and ignore error responses.
4439
if message.starts(with: "44") {
4540
// TODO: Determine what to do with returned error messages

Sources/GraphQLTransportWS/Server.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ public actor Server<
1616
let onInit: (InitPayload) async throws -> InitPayloadResult
1717
let onExecute: (GraphQLRequest, InitPayloadResult) async throws -> GraphQLResult
1818
let onSubscribe: (GraphQLRequest, InitPayloadResult) async throws -> SubscriptionSequenceType
19-
20-
let onMessage: (String) async throws -> Void
2119
let onOperationComplete: (String) async throws -> Void
2220
let onOperationError: (String, [Error]) async throws -> Void
2321

@@ -42,15 +40,13 @@ public actor Server<
4240
onInit: @escaping (InitPayload) async throws -> InitPayloadResult,
4341
onExecute: @escaping (GraphQLRequest, InitPayloadResult) async throws -> GraphQLResult,
4442
onSubscribe: @escaping (GraphQLRequest, InitPayloadResult) async throws -> SubscriptionSequenceType,
45-
onMessage: @escaping (String) async throws -> Void = { _ in },
4643
onOperationComplete: @escaping (String) async throws -> Void = { _ in },
4744
onOperationError: @escaping (String, [Error]) async throws -> Void = { _, _ in }
4845
) {
4946
self.messenger = messenger
5047
self.onInit = onInit
5148
self.onExecute = onExecute
5249
self.onSubscribe = onSubscribe
53-
self.onMessage = onMessage
5450
self.onOperationComplete = onOperationComplete
5551
self.onOperationError = onOperationError
5652
}
@@ -59,8 +55,6 @@ public actor Server<
5955
/// - Parameter incoming: The client message sequence that the server should react to.
6056
public func listen<A: AsyncSequence & Sendable>(to incoming: A) async throws -> Void where A.Element == String {
6157
for try await message in incoming {
62-
try await onMessage(message)
63-
6458
// Detect and ignore error responses.
6559
if message.starts(with: "44") {
6660
// TODO: Determine what to do with returned error messages

Tests/GraphQLTransportWSTests/GraphQLTransportWSTests.swift

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,23 @@ struct GraphqlTransportWSTests {
2929
}
3030
)
3131
let (messageStream, messageContinuation) = AsyncThrowingStream<String, any Error>.makeStream()
32+
let serverMessageStream = serverMessenger.stream.map { message in
33+
messageContinuation.yield(message)
34+
// Expect only one message
35+
messageContinuation.finish()
36+
return message
37+
}
3238
let client = Client<TokenInitPayload>(
3339
messenger: clientMessenger,
3440
onError: { message, _ in
3541
messageContinuation.finish(throwing: message.payload[0])
36-
},
37-
onMessage: { message, _ in
38-
messageContinuation.yield(message)
39-
// Expect only one message
40-
messageContinuation.finish()
42+
await clientMessenger.close()
4143
}
4244
)
43-
let serverStream = serverMessenger.stream
4445
let clientStream = clientMessenger.stream
4546
Task {
4647
try await server.listen(to: clientStream)
47-
}
48-
Task {
49-
try await client.listen(to: serverStream)
48+
await serverMessenger.close()
5049
}
5150

5251
try await client.sendStart(
@@ -59,6 +58,7 @@ struct GraphqlTransportWSTests {
5958
),
6059
id: UUID().uuidString
6160
)
61+
try await client.listen(to: serverMessageStream)
6262

6363
let messages = try await messageStream.reduce(into: [String]()) { result, message in
6464
result.append(message)
@@ -92,31 +92,31 @@ struct GraphqlTransportWSTests {
9292
}
9393
)
9494
let (messageStream, messageContinuation) = AsyncThrowingStream<String, any Error>.makeStream()
95+
let serverMessageStream = serverMessenger.stream.map { message in
96+
messageContinuation.yield(message)
97+
// Expect only one message
98+
messageContinuation.finish()
99+
return message
100+
}
95101
let client = Client<TokenInitPayload>(
96102
messenger: clientMessenger,
97103
onError: { message, _ in
98104
messageContinuation.finish(throwing: message.payload[0])
99-
},
100-
onMessage: { message, _ in
101-
messageContinuation.yield(message)
102-
// Expect only one message
103-
messageContinuation.finish()
105+
await clientMessenger.close()
104106
}
105107
)
106108
let clientStream = clientMessenger.stream
107-
let serverStream = serverMessenger.stream
108109
Task {
109110
try await server.listen(to: clientStream)
110-
}
111-
Task {
112-
try await client.listen(to: serverStream)
111+
await serverMessenger.close()
113112
}
114113

115114
try await client.sendConnectionInit(
116115
payload: TokenInitPayload(
117116
authToken: ""
118117
)
119118
)
119+
try await client.listen(to: serverMessageStream)
120120

121121
let messages = try await messageStream.reduce(into: [String]()) { result, message in
122122
result.append(message)
@@ -150,6 +150,10 @@ struct GraphqlTransportWSTests {
150150
}
151151
)
152152
let (messageStream, messageContinuation) = AsyncThrowingStream<String, any Error>.makeStream()
153+
let serverMessageStream = serverMessenger.stream.map { message in
154+
messageContinuation.yield(message)
155+
return message
156+
}
153157
let client = Client<TokenInitPayload>(
154158
messenger: clientMessenger,
155159
onConnectionAck: { _, client in
@@ -166,28 +170,25 @@ struct GraphqlTransportWSTests {
166170
},
167171
onError: { message, _ in
168172
messageContinuation.finish(throwing: message.payload[0])
173+
await clientMessenger.close()
169174
},
170175
onComplete: { _, _ in
171176
messageContinuation.finish()
172-
},
173-
onMessage: { message, _ in
174-
messageContinuation.yield(message)
177+
await clientMessenger.close()
175178
}
176179
)
177180
let clientStream = clientMessenger.stream
178-
let serverStream = serverMessenger.stream
179181
Task {
180182
try await server.listen(to: clientStream)
181-
}
182-
Task {
183-
try await client.listen(to: serverStream)
183+
await serverMessenger.close()
184184
}
185185

186186
try await client.sendConnectionInit(
187187
payload: TokenInitPayload(
188188
authToken: ""
189189
)
190190
)
191+
try await client.listen(to: serverMessageStream)
191192

192193
let messages = try await messageStream.reduce(into: [String]()) { result, message in
193194
result.append(message)
@@ -226,6 +227,11 @@ struct GraphqlTransportWSTests {
226227
}
227228
)
228229
let (messageStream, messageContinuation) = AsyncThrowingStream<String, any Error>.makeStream()
230+
// Used to extract the server messages
231+
let serverMessageStream = serverMessenger.stream.map { message in
232+
messageContinuation.yield(message)
233+
return message
234+
}
229235
let client = Client<TokenInitPayload>(
230236
messenger: clientMessenger,
231237
onConnectionAck: { _, client in
@@ -255,28 +261,25 @@ struct GraphqlTransportWSTests {
255261
},
256262
onError: { message, _ in
257263
messageContinuation.finish(throwing: message.payload[0])
264+
await clientMessenger.close()
258265
},
259266
onComplete: { _, _ in
260267
messageContinuation.finish()
261-
},
262-
onMessage: { message, _ in
263-
messageContinuation.yield(message)
268+
await clientMessenger.close()
264269
}
265270
)
266271
let clientStream = clientMessenger.stream
267-
let serverStream = serverMessenger.stream
268272
Task {
269273
try await server.listen(to: clientStream)
270-
}
271-
Task {
272-
try await client.listen(to: serverStream)
274+
await serverMessenger.close()
273275
}
274276

275277
try await client.sendConnectionInit(
276278
payload: TokenInitPayload(
277279
authToken: ""
278280
)
279281
)
282+
try await client.listen(to: serverMessageStream)
280283

281284
let messages = try await messageStream.reduce(into: [String]()) { result, message in
282285
result.append(message)

0 commit comments

Comments
 (0)