Skip to content

Commit b393742

Browse files
committed
Review Franz: simplify recursion cases
1 parent c46bf22 commit b393742

File tree

1 file changed

+18
-22
lines changed

1 file changed

+18
-22
lines changed

Sources/Kafka/RDKafka/RDKafkaClient.swift

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -274,39 +274,35 @@ final class RDKafkaClient: Sendable {
274274
cHeaders: inout [(key: UnsafePointer<CChar>, value: UnsafeRawBufferPointer?)],
275275
_ body: ([(key: UnsafePointer<CChar>, value: UnsafeRawBufferPointer?)]) throws -> T
276276
) rethrows -> T {
277-
if kafkaHeaders.isEmpty {
277+
guard let kafkaHeader = kafkaHeaders.popLast() else {
278278
// Base case: we have read all kafkaHeaders and now invoke the accessor closure
279279
// that can safely access the pointers in cHeaders
280280
return try body(cHeaders)
281-
} else {
282-
guard let kafkaHeader = kafkaHeaders.popLast() else {
283-
fatalError("kafkaHeaders should not be nil")
284-
}
281+
}
285282

286-
// Access underlying memory of key and value with scoped accessor and to a
287-
// recursive call to _withKafkaCHeadersRecursive in the scoped accessor.
288-
// This allows us to build a chain of scoped accessors so that the body closure
289-
// can ultimately access all kafkaHeader underlying key/value bytes safely.
290-
return try kafkaHeader.key.withCString { keyCString in
291-
if let headerValue = kafkaHeader.value {
292-
return try headerValue.withUnsafeReadableBytes { valueBuffer in
293-
let cHeader: (UnsafePointer<CChar>, UnsafeRawBufferPointer?) = (keyCString, valueBuffer)
294-
cHeaders.append(cHeader)
295-
return try self._withKafkaCHeadersRecursive(
296-
kafkaHeaders: &kafkaHeaders,
297-
cHeaders: &cHeaders,
298-
body
299-
)
300-
}
301-
} else {
302-
let cHeader: (UnsafePointer<CChar>, UnsafeRawBufferPointer?) = (keyCString, nil)
283+
// Access underlying memory of key and value with scoped accessor and to a
284+
// recursive call to _withKafkaCHeadersRecursive in the scoped accessor.
285+
// This allows us to build a chain of scoped accessors so that the body closure
286+
// can ultimately access all kafkaHeader underlying key/value bytes safely.
287+
return try kafkaHeader.key.withCString { keyCString in
288+
if let headerValue = kafkaHeader.value {
289+
return try headerValue.withUnsafeReadableBytes { valueBuffer in
290+
let cHeader: (UnsafePointer<CChar>, UnsafeRawBufferPointer?) = (keyCString, valueBuffer)
303291
cHeaders.append(cHeader)
304292
return try self._withKafkaCHeadersRecursive(
305293
kafkaHeaders: &kafkaHeaders,
306294
cHeaders: &cHeaders,
307295
body
308296
)
309297
}
298+
} else {
299+
let cHeader: (UnsafePointer<CChar>, UnsafeRawBufferPointer?) = (keyCString, nil)
300+
cHeaders.append(cHeader)
301+
return try self._withKafkaCHeadersRecursive(
302+
kafkaHeaders: &kafkaHeaders,
303+
cHeaders: &cHeaders,
304+
body
305+
)
310306
}
311307
}
312308
}

0 commit comments

Comments
 (0)