The Swift Package Index logo.Swift Package Index

Has it really been five years since Swift Package Index launched? Read our anniversary blog post!

Build Information

Successful build of RediStack, reference main (a05d4b), with Swift 6.1 for Android on 30 Jul 2025 13:39:06 UTC.

Swift 6 data race errors: 7

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4606859-1":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures 2>&1

Build Log

210 |                     self.loop.preconditionInEventLoop()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:210:21: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
208 |             self.connectionFactory(self.loop)
209 |                 .whenComplete { result in
210 |                     self.loop.preconditionInEventLoop()
    |                     `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
211 |
212 |                     self.pendingConnectionCount -= 1
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:251:64: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
249 |             // Great, we want this. We'll be "returning" it to the pool. First,
250 |             // attach the close callback to it.
251 |             connection.channel.closeFuture.whenComplete { _ in self.poolConnectionClosed(connection, logger: logger) }
    |                                                                `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
252 |             self._returnConnection(connection, logger: logger)
253 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:251:90: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
249 |             // Great, we want this. We'll be "returning" it to the pool. First,
250 |             // attach the close callback to it.
251 |             connection.channel.closeFuture.whenComplete { _ in self.poolConnectionClosed(connection, logger: logger) }
    |                                                                                          `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
252 |             self._returnConnection(connection, logger: logger)
253 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:483:13: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
481 |     private func closeConnectionForShutdown(_ connection: RedisConnection) {
482 |         connection.close().whenComplete { _ in
483 |             self.loop.preconditionInEventLoop()
    |             `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
484 |
485 |             switch self.state {
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:497:55: warning: implicit capture of 'self' requires that 'ConnectionPool' conforms to 'Sendable'; this is an error in the Swift 6 language mode
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
495 |                 // The state must not change if we are closing a connection, while we are
496 |                 // closing the pool.
497 |                 preconditionFailure("Invalid state: \(self.state)")
    |                                                       `- warning: implicit capture of 'self' requires that 'ConnectionPool' conforms to 'Sendable'; this is an error in the Swift 6 language mode
498 |             }
499 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:547:70: warning: passing non-sendable parameter 'onTimeout' to function expecting a @Sendable closure
543 |         }
544 |
545 |         mutating func scheduleDeadline(loop: EventLoop, deadline: NIODeadline, _ onTimeout: @escaping () -> Void) {
    |                                                                                  `- note: parameter 'onTimeout' is implicitly non-sendable
546 |             assert(self.timeoutTask == nil)
547 |             self.timeoutTask = loop.scheduleTask(deadline: deadline, onTimeout)
    |                                                                      `- warning: passing non-sendable parameter 'onTimeout' to function expecting a @Sendable closure
548 |         }
549 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:552:25: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
550 |         func succeed(_ connection: RedisConnection) {
551 |             self.timeoutTask?.cancel()
552 |             self.result.succeed(connection)
    |                         `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
553 |         }
554 |
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:102:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
100 |     public func activate(logger: Logger? = nil) {
101 |         self.loop.execute {
102 |             self.pool?.activate(logger: self.prepareLoggerForUse(logger))
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
103 |         }
104 |     }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:115:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
113 |     public func close(promise: EventLoopPromise<Void>? = nil, logger: Logger? = nil) {
114 |         self.loop.execute {
115 |             self.pool?.close(promise: promise, logger: self.prepareLoggerForUse(logger))
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
116 |
117 |             self.pubsubConnection = nil
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:164:36: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
162 |
163 |                 operation(connection)
164 |                     .always { _ in returnConnection(connection, context) }
    |                                    |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                                    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
165 |             },
166 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:164:53: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
162 |
163 |                 operation(connection)
164 |                     .always { _ in returnConnection(connection, context) }
    |                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
165 |             },
166 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:198:25: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
196 |
197 |             for request in unbufferedRequests {
198 |                 request.completeWith(self.connectionFactory(self.loop))
    |                         `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
199 |             }
200 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:191:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
189 |
190 |         self.loop.execute {
191 |             self.serverConnectionAddresses.update(newAddresses)
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
192 |
193 |             // Shiny, we can unbuffer any pending connections and pass them on as they now have somewhere to go.
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:21: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                     `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:21: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                     `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:69: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:324:36: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
322 |                     connection
323 |                     .send(command: command, with: arguments, logger: context)
324 |                     .always { _ in returnConnection(connection, context) }
    |                                    |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                                    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
325 |             },
326 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:324:53: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
322 |                     connection
323 |                     .send(command: command, with: arguments, logger: context)
324 |                     .always { _ in returnConnection(connection, context) }
    |                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
325 |             },
326 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:429:29: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
427 |                         // a "no-op" unsub, so we need to return this connection
428 |                         guard
429 |                             self.pubsubConnection == nil,
    |                             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:432:25: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
432 |                         returnConnection(connection, context)
    |                         |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                         `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
433 |                     }
434 |             },
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:432:42: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
432 |                         returnConnection(connection, context)
    |                                          `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
433 |                     }
434 |             },
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:449:30: warning: type 'T' does not conform to the 'Sendable' protocol
439 |
440 |     @usableFromInline
441 |     internal func forwardOperationToConnection<T>(
    |                                                `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
442 |         _ operation: @escaping (RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) ->
443 |             EventLoopFuture<T>,
    :
447 |         // Establish event loop context then jump to the in-loop version.
448 |         guard self.loop.inEventLoop else {
449 |             return self.loop.flatSubmit {
    |                              `- warning: type 'T' does not conform to the 'Sendable' protocol
450 |                 self.forwardOperationToConnection(
451 |                     operation,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:18: warning: type 'T' does not conform to the 'Sendable' protocol
439 |
440 |     @usableFromInline
441 |     internal func forwardOperationToConnection<T>(
    |                                                `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
442 |         _ operation: @escaping (RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) ->
443 |             EventLoopFuture<T>,
    :
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                  `- warning: type 'T' does not conform to the 'Sendable' protocol
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:450:17: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
448 |         guard self.loop.inEventLoop else {
449 |             return self.loop.flatSubmit {
450 |                 self.forwardOperationToConnection(
    |                 `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
451 |                     operation,
452 |                     preferredConnection: preferredConnection,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:451:21: warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
449 |             return self.loop.flatSubmit {
450 |                 self.forwardOperationToConnection(
451 |                     operation,
    |                     |- warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
452 |                     preferredConnection: preferredConnection,
453 |                     context: context
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:452:42: warning: capture of 'preferredConnection' with non-sendable type 'RedisConnection?' in a '@Sendable' closure
450 |                 self.forwardOperationToConnection(
451 |                     operation,
452 |                     preferredConnection: preferredConnection,
    |                                          `- warning: capture of 'preferredConnection' with non-sendable type 'RedisConnection?' in a '@Sendable' closure
453 |                     context: context
454 |                 )
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:28: warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                            |- warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
    |                            `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:42: warning: capture of 'pool' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                                          `- warning: capture of 'pool' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:38:22: note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
[726/731] Compiling RediStack RedisConnectionPool.swift
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:121:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
 99 | ///
100 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
101 | public struct RedisSetCommandCondition: Hashable {
    |               `- note: consider making struct 'RedisSetCommandCondition' conform to the 'Sendable' protocol
102 |     private enum Condition: String, Hashable {
103 |         case keyExists = "XX"
    :
119 | extension RedisSetCommandCondition {
120 |     /// No condition is required to be met in order to set the key's value.
121 |     public static let none = RedisSetCommandCondition(.none)
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
122 |
123 |     /// Only set the key if it already exists.
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:126:23: warning: static property 'keyExists' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
 99 | ///
100 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
101 | public struct RedisSetCommandCondition: Hashable {
    |               `- note: consider making struct 'RedisSetCommandCondition' conform to the 'Sendable' protocol
102 |     private enum Condition: String, Hashable {
103 |         case keyExists = "XX"
    :
124 |     ///
125 |     /// Redis documentation refers to this as the option "XX".
126 |     public static let keyExists = RedisSetCommandCondition(.keyExists)
    |                       |- warning: static property 'keyExists' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'keyExists' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
127 |
128 |     /// Only set the key if it does not already exist.
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:131:23: warning: static property 'keyDoesNotExist' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
 99 | ///
100 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
101 | public struct RedisSetCommandCondition: Hashable {
    |               `- note: consider making struct 'RedisSetCommandCondition' conform to the 'Sendable' protocol
102 |     private enum Condition: String, Hashable {
103 |         case keyExists = "XX"
    :
129 |     ///
130 |     /// Redis documentation refers to this as the option "NX".
131 |     public static let keyDoesNotExist = RedisSetCommandCondition(.keyDoesNotExist)
    |                       |- warning: static property 'keyDoesNotExist' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'keyDoesNotExist' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
132 | }
133 |
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:168:23: warning: static property 'keepExisting' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandExpiration' may have shared mutable state; this is an error in the Swift 6 language mode
135 | ///
136 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
137 | public struct RedisSetCommandExpiration: Hashable {
    |               `- note: consider making struct 'RedisSetCommandExpiration' conform to the 'Sendable' protocol
138 |     private enum Expiration: Hashable {
139 |         case keepExisting
    :
166 |     /// Redis documentation refers to this as "KEEPTTL".
167 |     /// - Important: This is option is only available in Redis 6.0+. An error will be returned if this value is sent in lower versions of Redis.
168 |     public static let keepExisting = RedisSetCommandExpiration(.keepExisting)
    |                       |- warning: static property 'keepExisting' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandExpiration' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'keepExisting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
169 |
170 |     /// Expire the key after the given number of seconds.
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:52:59: warning: type 'RESPValue' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 50 |     /// - Returns: The values stored at the keys provided, matching the same order.
 51 |     public func mget(_ keys: [RedisKey]) -> EventLoopFuture<[RESPValue]> {
 52 |         guard keys.count > 0 else { return self.eventLoop.makeSucceededFuture([]) }
    |                                                           `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 53 |
 54 |         let args = keys.map(RESPValue.init)
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:140:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
138 |         } else {
139 |             self.loop.execute {
140 |                 self.refillConnections(logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
141 |             }
142 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:153:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
151 |         } else {
152 |             self.loop.execute {
153 |                 self.closePool(promise: promise, logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
154 |             }
155 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:162:30: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
160 |             return self._leaseConnection(deadline, logger: logger)
161 |         } else {
162 |             return self.loop.flatSubmit {
    |                              `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
163 |                 self._leaseConnection(deadline, logger: logger)
164 |             }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:163:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
161 |         } else {
162 |             return self.loop.flatSubmit {
163 |                 self._leaseConnection(deadline, logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
164 |             }
165 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:173:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
171 |         } else {
172 |             return self.loop.execute {
173 |                 self._returnLeasedConnection(connection, logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
174 |             }
175 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:173:46: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
171 |         } else {
172 |             return self.loop.execute {
173 |                 self._returnLeasedConnection(connection, logger: logger)
    |                                              `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
174 |             }
175 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:208:13: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
206 |
207 |         self.loop.scheduleTask(in: delay) {
208 |             self.connectionFactory(self.loop)
    |             `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
209 |                 .whenComplete { result in
210 |                     self.loop.preconditionInEventLoop()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:210:21: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
208 |             self.connectionFactory(self.loop)
209 |                 .whenComplete { result in
210 |                     self.loop.preconditionInEventLoop()
    |                     `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
211 |
212 |                     self.pendingConnectionCount -= 1
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:251:64: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
249 |             // Great, we want this. We'll be "returning" it to the pool. First,
250 |             // attach the close callback to it.
251 |             connection.channel.closeFuture.whenComplete { _ in self.poolConnectionClosed(connection, logger: logger) }
    |                                                                `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
252 |             self._returnConnection(connection, logger: logger)
253 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:251:90: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
249 |             // Great, we want this. We'll be "returning" it to the pool. First,
250 |             // attach the close callback to it.
251 |             connection.channel.closeFuture.whenComplete { _ in self.poolConnectionClosed(connection, logger: logger) }
    |                                                                                          `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
252 |             self._returnConnection(connection, logger: logger)
253 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:483:13: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
481 |     private func closeConnectionForShutdown(_ connection: RedisConnection) {
482 |         connection.close().whenComplete { _ in
483 |             self.loop.preconditionInEventLoop()
    |             `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
484 |
485 |             switch self.state {
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:497:55: warning: implicit capture of 'self' requires that 'ConnectionPool' conforms to 'Sendable'; this is an error in the Swift 6 language mode
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
495 |                 // The state must not change if we are closing a connection, while we are
496 |                 // closing the pool.
497 |                 preconditionFailure("Invalid state: \(self.state)")
    |                                                       `- warning: implicit capture of 'self' requires that 'ConnectionPool' conforms to 'Sendable'; this is an error in the Swift 6 language mode
498 |             }
499 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:547:70: warning: passing non-sendable parameter 'onTimeout' to function expecting a @Sendable closure
543 |         }
544 |
545 |         mutating func scheduleDeadline(loop: EventLoop, deadline: NIODeadline, _ onTimeout: @escaping () -> Void) {
    |                                                                                  `- note: parameter 'onTimeout' is implicitly non-sendable
546 |             assert(self.timeoutTask == nil)
547 |             self.timeoutTask = loop.scheduleTask(deadline: deadline, onTimeout)
    |                                                                      `- warning: passing non-sendable parameter 'onTimeout' to function expecting a @Sendable closure
548 |         }
549 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:552:25: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
550 |         func succeed(_ connection: RedisConnection) {
551 |             self.timeoutTask?.cancel()
552 |             self.result.succeed(connection)
    |                         `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
553 |         }
554 |
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:102:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
100 |     public func activate(logger: Logger? = nil) {
101 |         self.loop.execute {
102 |             self.pool?.activate(logger: self.prepareLoggerForUse(logger))
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
103 |         }
104 |     }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:115:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
113 |     public func close(promise: EventLoopPromise<Void>? = nil, logger: Logger? = nil) {
114 |         self.loop.execute {
115 |             self.pool?.close(promise: promise, logger: self.prepareLoggerForUse(logger))
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
116 |
117 |             self.pubsubConnection = nil
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:164:36: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
162 |
163 |                 operation(connection)
164 |                     .always { _ in returnConnection(connection, context) }
    |                                    |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                                    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
165 |             },
166 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:164:53: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
162 |
163 |                 operation(connection)
164 |                     .always { _ in returnConnection(connection, context) }
    |                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
165 |             },
166 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:198:25: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
196 |
197 |             for request in unbufferedRequests {
198 |                 request.completeWith(self.connectionFactory(self.loop))
    |                         `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
199 |             }
200 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:191:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
189 |
190 |         self.loop.execute {
191 |             self.serverConnectionAddresses.update(newAddresses)
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
192 |
193 |             // Shiny, we can unbuffer any pending connections and pass them on as they now have somewhere to go.
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:21: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                     `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:21: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                     `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:69: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:324:36: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
322 |                     connection
323 |                     .send(command: command, with: arguments, logger: context)
324 |                     .always { _ in returnConnection(connection, context) }
    |                                    |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                                    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
325 |             },
326 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:324:53: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
322 |                     connection
323 |                     .send(command: command, with: arguments, logger: context)
324 |                     .always { _ in returnConnection(connection, context) }
    |                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
325 |             },
326 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:429:29: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
427 |                         // a "no-op" unsub, so we need to return this connection
428 |                         guard
429 |                             self.pubsubConnection == nil,
    |                             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:432:25: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
432 |                         returnConnection(connection, context)
    |                         |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                         `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
433 |                     }
434 |             },
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:432:42: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
432 |                         returnConnection(connection, context)
    |                                          `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
433 |                     }
434 |             },
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:449:30: warning: type 'T' does not conform to the 'Sendable' protocol
439 |
440 |     @usableFromInline
441 |     internal func forwardOperationToConnection<T>(
    |                                                `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
442 |         _ operation: @escaping (RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) ->
443 |             EventLoopFuture<T>,
    :
447 |         // Establish event loop context then jump to the in-loop version.
448 |         guard self.loop.inEventLoop else {
449 |             return self.loop.flatSubmit {
    |                              `- warning: type 'T' does not conform to the 'Sendable' protocol
450 |                 self.forwardOperationToConnection(
451 |                     operation,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:18: warning: type 'T' does not conform to the 'Sendable' protocol
439 |
440 |     @usableFromInline
441 |     internal func forwardOperationToConnection<T>(
    |                                                `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
442 |         _ operation: @escaping (RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) ->
443 |             EventLoopFuture<T>,
    :
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                  `- warning: type 'T' does not conform to the 'Sendable' protocol
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:450:17: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
448 |         guard self.loop.inEventLoop else {
449 |             return self.loop.flatSubmit {
450 |                 self.forwardOperationToConnection(
    |                 `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
451 |                     operation,
452 |                     preferredConnection: preferredConnection,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:451:21: warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
449 |             return self.loop.flatSubmit {
450 |                 self.forwardOperationToConnection(
451 |                     operation,
    |                     |- warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
452 |                     preferredConnection: preferredConnection,
453 |                     context: context
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:452:42: warning: capture of 'preferredConnection' with non-sendable type 'RedisConnection?' in a '@Sendable' closure
450 |                 self.forwardOperationToConnection(
451 |                     operation,
452 |                     preferredConnection: preferredConnection,
    |                                          `- warning: capture of 'preferredConnection' with non-sendable type 'RedisConnection?' in a '@Sendable' closure
453 |                     context: context
454 |                 )
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:28: warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                            |- warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
    |                            `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:42: warning: capture of 'pool' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                                          `- warning: capture of 'pool' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:38:22: note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
[727/731] Compiling RediStack RedisConnectionPoolError.swift
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:121:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
 99 | ///
100 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
101 | public struct RedisSetCommandCondition: Hashable {
    |               `- note: consider making struct 'RedisSetCommandCondition' conform to the 'Sendable' protocol
102 |     private enum Condition: String, Hashable {
103 |         case keyExists = "XX"
    :
119 | extension RedisSetCommandCondition {
120 |     /// No condition is required to be met in order to set the key's value.
121 |     public static let none = RedisSetCommandCondition(.none)
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
122 |
123 |     /// Only set the key if it already exists.
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:126:23: warning: static property 'keyExists' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
 99 | ///
100 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
101 | public struct RedisSetCommandCondition: Hashable {
    |               `- note: consider making struct 'RedisSetCommandCondition' conform to the 'Sendable' protocol
102 |     private enum Condition: String, Hashable {
103 |         case keyExists = "XX"
    :
124 |     ///
125 |     /// Redis documentation refers to this as the option "XX".
126 |     public static let keyExists = RedisSetCommandCondition(.keyExists)
    |                       |- warning: static property 'keyExists' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'keyExists' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
127 |
128 |     /// Only set the key if it does not already exist.
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:131:23: warning: static property 'keyDoesNotExist' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
 99 | ///
100 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
101 | public struct RedisSetCommandCondition: Hashable {
    |               `- note: consider making struct 'RedisSetCommandCondition' conform to the 'Sendable' protocol
102 |     private enum Condition: String, Hashable {
103 |         case keyExists = "XX"
    :
129 |     ///
130 |     /// Redis documentation refers to this as the option "NX".
131 |     public static let keyDoesNotExist = RedisSetCommandCondition(.keyDoesNotExist)
    |                       |- warning: static property 'keyDoesNotExist' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandCondition' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'keyDoesNotExist' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
132 | }
133 |
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:168:23: warning: static property 'keepExisting' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandExpiration' may have shared mutable state; this is an error in the Swift 6 language mode
135 | ///
136 | /// See [https://redis.io/commands/set](https://redis.io/commands/set)
137 | public struct RedisSetCommandExpiration: Hashable {
    |               `- note: consider making struct 'RedisSetCommandExpiration' conform to the 'Sendable' protocol
138 |     private enum Expiration: Hashable {
139 |         case keepExisting
    :
166 |     /// Redis documentation refers to this as "KEEPTTL".
167 |     /// - Important: This is option is only available in Redis 6.0+. An error will be returned if this value is sent in lower versions of Redis.
168 |     public static let keepExisting = RedisSetCommandExpiration(.keepExisting)
    |                       |- warning: static property 'keepExisting' is not concurrency-safe because non-'Sendable' type 'RedisSetCommandExpiration' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'keepExisting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
169 |
170 |     /// Expire the key after the given number of seconds.
/host/spi-builder-workspace/Sources/RediStack/Commands/StringCommands.swift:52:59: warning: type 'RESPValue' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 50 |     /// - Returns: The values stored at the keys provided, matching the same order.
 51 |     public func mget(_ keys: [RedisKey]) -> EventLoopFuture<[RESPValue]> {
 52 |         guard keys.count > 0 else { return self.eventLoop.makeSucceededFuture([]) }
    |                                                           `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 53 |
 54 |         let args = keys.map(RESPValue.init)
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:140:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
138 |         } else {
139 |             self.loop.execute {
140 |                 self.refillConnections(logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
141 |             }
142 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:153:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
151 |         } else {
152 |             self.loop.execute {
153 |                 self.closePool(promise: promise, logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
154 |             }
155 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:162:30: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
160 |             return self._leaseConnection(deadline, logger: logger)
161 |         } else {
162 |             return self.loop.flatSubmit {
    |                              `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
163 |                 self._leaseConnection(deadline, logger: logger)
164 |             }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:163:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
161 |         } else {
162 |             return self.loop.flatSubmit {
163 |                 self._leaseConnection(deadline, logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
164 |             }
165 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:173:17: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
171 |         } else {
172 |             return self.loop.execute {
173 |                 self._returnLeasedConnection(connection, logger: logger)
    |                 `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
174 |             }
175 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:173:46: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
171 |         } else {
172 |             return self.loop.execute {
173 |                 self._returnLeasedConnection(connection, logger: logger)
    |                                              `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
174 |             }
175 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:208:13: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
206 |
207 |         self.loop.scheduleTask(in: delay) {
208 |             self.connectionFactory(self.loop)
    |             `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
209 |                 .whenComplete { result in
210 |                     self.loop.preconditionInEventLoop()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:210:21: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
208 |             self.connectionFactory(self.loop)
209 |                 .whenComplete { result in
210 |                     self.loop.preconditionInEventLoop()
    |                     `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
211 |
212 |                     self.pendingConnectionCount -= 1
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:251:64: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
249 |             // Great, we want this. We'll be "returning" it to the pool. First,
250 |             // attach the close callback to it.
251 |             connection.channel.closeFuture.whenComplete { _ in self.poolConnectionClosed(connection, logger: logger) }
    |                                                                `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
252 |             self._returnConnection(connection, logger: logger)
253 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:251:90: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
249 |             // Great, we want this. We'll be "returning" it to the pool. First,
250 |             // attach the close callback to it.
251 |             connection.channel.closeFuture.whenComplete { _ in self.poolConnectionClosed(connection, logger: logger) }
    |                                                                                          `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
252 |             self._returnConnection(connection, logger: logger)
253 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:483:13: warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
481 |     private func closeConnectionForShutdown(_ connection: RedisConnection) {
482 |         connection.close().whenComplete { _ in
483 |             self.loop.preconditionInEventLoop()
    |             `- warning: capture of 'self' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
484 |
485 |             switch self.state {
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:497:55: warning: implicit capture of 'self' requires that 'ConnectionPool' conforms to 'Sendable'; this is an error in the Swift 6 language mode
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
    :
495 |                 // The state must not change if we are closing a connection, while we are
496 |                 // closing the pool.
497 |                 preconditionFailure("Invalid state: \(self.state)")
    |                                                       `- warning: implicit capture of 'self' requires that 'ConnectionPool' conforms to 'Sendable'; this is an error in the Swift 6 language mode
498 |             }
499 |         }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:547:70: warning: passing non-sendable parameter 'onTimeout' to function expecting a @Sendable closure
543 |         }
544 |
545 |         mutating func scheduleDeadline(loop: EventLoop, deadline: NIODeadline, _ onTimeout: @escaping () -> Void) {
    |                                                                                  `- note: parameter 'onTimeout' is implicitly non-sendable
546 |             assert(self.timeoutTask == nil)
547 |             self.timeoutTask = loop.scheduleTask(deadline: deadline, onTimeout)
    |                                                                      `- warning: passing non-sendable parameter 'onTimeout' to function expecting a @Sendable closure
548 |         }
549 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:552:25: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
550 |         func succeed(_ connection: RedisConnection) {
551 |             self.timeoutTask?.cancel()
552 |             self.result.succeed(connection)
    |                         `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
553 |         }
554 |
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:102:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
100 |     public func activate(logger: Logger? = nil) {
101 |         self.loop.execute {
102 |             self.pool?.activate(logger: self.prepareLoggerForUse(logger))
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
103 |         }
104 |     }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:115:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
113 |     public func close(promise: EventLoopPromise<Void>? = nil, logger: Logger? = nil) {
114 |         self.loop.execute {
115 |             self.pool?.close(promise: promise, logger: self.prepareLoggerForUse(logger))
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
116 |
117 |             self.pubsubConnection = nil
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:164:36: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
162 |
163 |                 operation(connection)
164 |                     .always { _ in returnConnection(connection, context) }
    |                                    |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                                    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
165 |             },
166 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:164:53: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
162 |
163 |                 operation(connection)
164 |                     .always { _ in returnConnection(connection, context) }
    |                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
165 |             },
166 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:198:25: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
196 |
197 |             for request in unbufferedRequests {
198 |                 request.completeWith(self.connectionFactory(self.loop))
    |                         `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
199 |             }
200 |         }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:191:13: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
189 |
190 |         self.loop.execute {
191 |             self.serverConnectionAddresses.update(newAddresses)
    |             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
192 |
193 |             // Shiny, we can unbuffer any pending connections and pass them on as they now have somewhere to go.
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:21: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                     `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:21: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                     `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:249:69: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
247 |                 connection.allowSubscriptions = false
248 |                 connection.channel.closeFuture.whenComplete { _ in
249 |                     self.configuration.onUnexpectedConnectionClose?(connection)
    |                                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
250 |                 }
251 |                 return connection
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:324:36: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
322 |                     connection
323 |                     .send(command: command, with: arguments, logger: context)
324 |                     .always { _ in returnConnection(connection, context) }
    |                                    |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                                    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
325 |             },
326 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:324:53: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
322 |                     connection
323 |                     .send(command: command, with: arguments, logger: context)
324 |                     .always { _ in returnConnection(connection, context) }
    |                                                     `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
325 |             },
326 |             preferredConnection: nil,
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:429:29: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
427 |                         // a "no-op" unsub, so we need to return this connection
428 |                         guard
429 |                             self.pubsubConnection == nil,
    |                             `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:432:25: warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
432 |                         returnConnection(connection, context)
    |                         |- warning: capture of 'returnConnection' with non-sendable type '(RedisConnection, Logger) -> Void' in a '@Sendable' closure
    |                         `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
433 |                     }
434 |             },
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:432:42: warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
430 |                             self.leasedConnectionCount > 0
431 |                         else { return }
432 |                         returnConnection(connection, context)
    |                                          `- warning: capture of 'connection' with non-sendable type 'RedisConnection' in a '@Sendable' closure
433 |                     }
434 |             },
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:449:30: warning: type 'T' does not conform to the 'Sendable' protocol
439 |
440 |     @usableFromInline
441 |     internal func forwardOperationToConnection<T>(
    |                                                `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
442 |         _ operation: @escaping (RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) ->
443 |             EventLoopFuture<T>,
    :
447 |         // Establish event loop context then jump to the in-loop version.
448 |         guard self.loop.inEventLoop else {
449 |             return self.loop.flatSubmit {
    |                              `- warning: type 'T' does not conform to the 'Sendable' protocol
450 |                 self.forwardOperationToConnection(
451 |                     operation,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:18: warning: type 'T' does not conform to the 'Sendable' protocol
439 |
440 |     @usableFromInline
441 |     internal func forwardOperationToConnection<T>(
    |                                                `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
442 |         _ operation: @escaping (RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) ->
443 |             EventLoopFuture<T>,
    :
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                  `- warning: type 'T' does not conform to the 'Sendable' protocol
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:450:17: warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
 29 | /// single `EventLoop`: if callers call the API from a different `EventLoop` (or from no `EventLoop` at all)
 30 | /// `RedisConnectionPool` will ensure that the call is dispatched to the correct loop.
 31 | public final class RedisConnectionPool {
    |                    `- note: class 'RedisConnectionPool' does not conform to the 'Sendable' protocol
 32 |     /// A unique identifer to represent this connection.
 33 |     public let id = UUID()
    :
448 |         guard self.loop.inEventLoop else {
449 |             return self.loop.flatSubmit {
450 |                 self.forwardOperationToConnection(
    |                 `- warning: capture of 'self' with non-sendable type 'RedisConnectionPool' in a '@Sendable' closure
451 |                     operation,
452 |                     preferredConnection: preferredConnection,
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:451:21: warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
449 |             return self.loop.flatSubmit {
450 |                 self.forwardOperationToConnection(
451 |                     operation,
    |                     |- warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
452 |                     preferredConnection: preferredConnection,
453 |                     context: context
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:452:42: warning: capture of 'preferredConnection' with non-sendable type 'RedisConnection?' in a '@Sendable' closure
450 |                 self.forwardOperationToConnection(
451 |                     operation,
452 |                     preferredConnection: preferredConnection,
    |                                          `- warning: capture of 'preferredConnection' with non-sendable type 'RedisConnection?' in a '@Sendable' closure
453 |                     context: context
454 |                 )
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:28: warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                            |- warning: capture of 'operation' with non-sendable type '(RedisConnection, @escaping (RedisConnection, Logger) -> Void, Logger) -> EventLoopFuture<T>' in a '@Sendable' closure
    |                            `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/RedisConnectionPool.swift:473:42: warning: capture of 'pool' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
471 |                     logger: logger
472 |                 )
473 |                 .flatMap { operation($0, pool.returnConnection(_:logger:), logger) }
    |                                          `- warning: capture of 'pool' with non-sendable type 'ConnectionPool' in a '@Sendable' closure
474 |         }
475 |
/host/spi-builder-workspace/Sources/RediStack/ConnectionPool/ConnectionPool.swift:38:22: note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 36 | /// and being used, at the cost of incurring more reconnects under low load. Of course, when we're under low load we don't
 37 | /// really care how many reconnects there are.
 38 | internal final class ConnectionPool {
    |                      `- note: class 'ConnectionPool' does not conform to the 'Sendable' protocol
 39 |     /// A function used to create Redis connections.
 40 |     private let connectionFactory: (EventLoop) -> EventLoopFuture<RedisConnection>
[728/731] Compiling RediStack RedisKey.swift
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:117:24: warning: type 'RESPValue' does not conform to the 'Sendable' protocol
115 |
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
    |                        `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
119 |         }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:54: warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |                                                      `- warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:67: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                                                   `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:127:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
125 |
126 |     internal func punsubscribe(from patterns: [String]) -> EventLoopFuture<Void> {
127 |         self.eventLoop.flatSubmit { self.client.punsubscribe(from: patterns, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
128 |     }
129 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:137:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
135 |     ) -> EventLoopFuture<Void> {
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:138:21: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
138 |                 to: channels,
    |                     `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:139:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
137 |             self.client.subscribe(
138 |                 to: channels,
139 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:140:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
141 |                 onUnsubscribe: unsubscribeHandler,
142 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:141:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
142 |                 logger: self.logger
143 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:154:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
152 |     ) -> EventLoopFuture<Void> {
153 |         self.eventLoop.flatSubmit {
154 |             self.client.psubscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:156:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
154 |             self.client.psubscribe(
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:157:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
158 |                 onUnsubscribe: unsubscribeHandler,
159 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:158:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
159 |                 logger: self.logger
160 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:47:23: warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 45 |
 46 |     /// The wrapped `Metrics.Gauge` maintaining the current number of connections this library has active.
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
    |                       |- warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeConnectionCount' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeConnectionCount' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:49:23: warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
    |                       |- warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeChannelSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeChannelSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:51:23: warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
    |                       |- warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activePatternSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activePatternSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     /// The `Metrics.Counter` that retains the number of connections made since application startup.
 53 |     public static let totalConnectionCount = Counter(label: .totalConnectionCount)
[729/731] Compiling RediStack RedisLogging.swift
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:117:24: warning: type 'RESPValue' does not conform to the 'Sendable' protocol
115 |
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
    |                        `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
119 |         }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:54: warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |                                                      `- warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:67: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                                                   `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:127:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
125 |
126 |     internal func punsubscribe(from patterns: [String]) -> EventLoopFuture<Void> {
127 |         self.eventLoop.flatSubmit { self.client.punsubscribe(from: patterns, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
128 |     }
129 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:137:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
135 |     ) -> EventLoopFuture<Void> {
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:138:21: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
138 |                 to: channels,
    |                     `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:139:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
137 |             self.client.subscribe(
138 |                 to: channels,
139 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:140:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
141 |                 onUnsubscribe: unsubscribeHandler,
142 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:141:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
142 |                 logger: self.logger
143 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:154:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
152 |     ) -> EventLoopFuture<Void> {
153 |         self.eventLoop.flatSubmit {
154 |             self.client.psubscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:156:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
154 |             self.client.psubscribe(
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:157:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
158 |                 onUnsubscribe: unsubscribeHandler,
159 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:158:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
159 |                 logger: self.logger
160 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:47:23: warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 45 |
 46 |     /// The wrapped `Metrics.Gauge` maintaining the current number of connections this library has active.
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
    |                       |- warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeConnectionCount' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeConnectionCount' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:49:23: warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
    |                       |- warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeChannelSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeChannelSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:51:23: warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
    |                       |- warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activePatternSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activePatternSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     /// The `Metrics.Counter` that retains the number of connections made since application startup.
 53 |     public static let totalConnectionCount = Counter(label: .totalConnectionCount)
[730/731] Compiling RediStack RedisMetrics.swift
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:117:24: warning: type 'RESPValue' does not conform to the 'Sendable' protocol
115 |
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
    |                        `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
119 |         }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:54: warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |                                                      `- warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:67: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                                                   `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:127:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
125 |
126 |     internal func punsubscribe(from patterns: [String]) -> EventLoopFuture<Void> {
127 |         self.eventLoop.flatSubmit { self.client.punsubscribe(from: patterns, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
128 |     }
129 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:137:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
135 |     ) -> EventLoopFuture<Void> {
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:138:21: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
138 |                 to: channels,
    |                     `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:139:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
137 |             self.client.subscribe(
138 |                 to: channels,
139 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:140:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
141 |                 onUnsubscribe: unsubscribeHandler,
142 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:141:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
142 |                 logger: self.logger
143 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:154:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
152 |     ) -> EventLoopFuture<Void> {
153 |         self.eventLoop.flatSubmit {
154 |             self.client.psubscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:156:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
154 |             self.client.psubscribe(
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:157:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
158 |                 onUnsubscribe: unsubscribeHandler,
159 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:158:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
159 |                 logger: self.logger
160 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:47:23: warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 45 |
 46 |     /// The wrapped `Metrics.Gauge` maintaining the current number of connections this library has active.
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
    |                       |- warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeConnectionCount' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeConnectionCount' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:49:23: warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
    |                       |- warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeChannelSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeChannelSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:51:23: warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
    |                       |- warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activePatternSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activePatternSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     /// The `Metrics.Counter` that retains the number of connections made since application startup.
 53 |     public static let totalConnectionCount = Counter(label: .totalConnectionCount)
[731/731] Compiling RediStack _Deprecations.swift
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:117:24: warning: type 'RESPValue' does not conform to the 'Sendable' protocol
115 |
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
    |                        `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
119 |         }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:118:54: warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
116 |     internal func send(command: String, with arguments: [RESPValue]) -> EventLoopFuture<RESPValue> {
117 |         self.eventLoop.flatSubmit {
118 |             self.client.send(command: command, with: arguments, logger: self.logger)
    |                                                      `- warning: capture of 'arguments' with non-sendable type '[RESPValue]' in a '@Sendable' closure
119 |         }
120 |     }
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: consider making enum 'RESPValue' conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:123:67: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
121 |
122 |     internal func unsubscribe(from channels: [RedisChannelName]) -> EventLoopFuture<Void> {
123 |         self.eventLoop.flatSubmit { self.client.unsubscribe(from: channels, logger: self.logger) }
    |                                                                   `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
124 |     }
125 |
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:127:37: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
125 |
126 |     internal func punsubscribe(from patterns: [String]) -> EventLoopFuture<Void> {
127 |         self.eventLoop.flatSubmit { self.client.punsubscribe(from: patterns, logger: self.logger) }
    |                                     `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
128 |     }
129 |
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:137:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
135 |     ) -> EventLoopFuture<Void> {
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:138:21: warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
136 |         self.eventLoop.flatSubmit {
137 |             self.client.subscribe(
138 |                 to: channels,
    |                     `- warning: capture of 'channels' with non-sendable type '[RedisChannelName]' in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisChannelName.swift:23:15: note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
21 | /// let channel: RedisChannelName = "channel1" // or "\(channelNameVariable)"
22 | /// ```
23 | public struct RedisChannelName:
   |               `- note: consider making struct 'RedisChannelName' conform to the 'Sendable' protocol
24 |     RESPValueConvertible,
25 |     RawRepresentable,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:139:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
137 |             self.client.subscribe(
138 |                 to: channels,
139 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:140:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
138 |                 to: channels,
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
141 |                 onUnsubscribe: unsubscribeHandler,
142 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:141:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
139 |                 messageReceiver: receiver,
140 |                 onSubscribe: subscribeHandler,
141 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
142 |                 logger: self.logger
143 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:154:13: warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
 95 | /// An internal implementation wrapper of a given `RedisClientWithUserContext` that enables users to pass a given `Logging.Logger`
 96 | /// instance to capture command logs within their preferred contexts.
 97 | internal struct UserContextRedisClient<Client: RedisClientWithUserContext>: RedisClient {
    |                 `- note: consider making generic struct 'UserContextRedisClient' conform to the 'Sendable' protocol
 98 |     internal var eventLoop: EventLoop { self.client.eventLoop }
 99 |
    :
152 |     ) -> EventLoopFuture<Void> {
153 |         self.eventLoop.flatSubmit {
154 |             self.client.psubscribe(
    |             `- warning: capture of 'self' with non-sendable type 'UserContextRedisClient<Client>' in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:156:34: warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
154 |             self.client.psubscribe(
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
    |                                  |- warning: capture of 'receiver' with non-sendable type 'RedisSubscriptionMessageReceiver' (aka '(RedisChannelName, RESPValue) -> ()') in a '@Sendable' closure
    |                                  `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:157:30: warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
155 |                 to: patterns,
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
    |                              |- warning: capture of 'subscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                              `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
158 |                 onUnsubscribe: unsubscribeHandler,
159 |                 logger: self.logger
/host/spi-builder-workspace/Sources/RediStack/RedisLogging.swift:158:32: warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
156 |                 messageReceiver: receiver,
157 |                 onSubscribe: subscribeHandler,
158 |                 onUnsubscribe: unsubscribeHandler,
    |                                |- warning: capture of 'unsubscribeHandler' with non-sendable type 'RedisSubscriptionChangeHandler?' (aka 'Optional<(String, Int) -> ()>') in a '@Sendable' closure
    |                                `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
159 |                 logger: self.logger
160 |             )
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:47:23: warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 45 |
 46 |     /// The wrapped `Metrics.Gauge` maintaining the current number of connections this library has active.
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
    |                       |- warning: static property 'activeConnectionCount' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeConnectionCount' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeConnectionCount' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:49:23: warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 47 |     public static var activeConnectionCount = IncrementalGauge(.activeConnectionCount)
 48 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channels.
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
    |                       |- warning: static property 'activeChannelSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activeChannelSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activeChannelSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
/host/spi-builder-workspace/Sources/RediStack/RedisMetrics.swift:51:23: warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 49 |     public static var activeChannelSubscriptions = IncrementalGauge(.activeChannelSubscriptions)
 50 |     /// The wrapped `Metrics.Gauge` maintaining the current number of subscriptions to channel patterns.
 51 |     public static var activePatternSubscriptions = IncrementalGauge(.activePatternSubscriptions)
    |                       |- warning: static property 'activePatternSubscriptions' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'activePatternSubscriptions' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'activePatternSubscriptions' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     /// The `Metrics.Counter` that retains the number of connections made since application startup.
 53 |     public static let totalConnectionCount = Counter(label: .totalConnectionCount)
[733/741] Compiling RediStackTestUtils _Deprecations.swift
[734/741] Compiling RedisTypes RedisSet.swift
/host/spi-builder-workspace/Sources/RedisTypes/RedisSet.swift:199:62: warning: type 'Element' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 57 | ///
 58 | /// See [https://redis.io/topics/data-types-intro#sets](https://redis.io/topics/data-types-intro#sets)
 59 | public struct RedisSet<Element> where Element: RESPValueConvertible {
    |                        `- note: consider making generic parameter 'Element' conform to the 'Sendable' protocol
 60 |     /// The key in Redis that this instance is a reference to.
 61 |     public var identifier: RedisKey { self.id }
    :
197 |     public func popRandomElements(max count: Int) -> EventLoopFuture<[Element]> {
198 |         guard count >= 0 else { return self.client.eventLoop.makeFailedFuture(RedisError.indexOutOfRange) }
199 |         guard count >= 1 else { return self.client.eventLoop.makeSucceededFuture([]) }
    |                                                              `- warning: type 'Element' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
200 |         return self.client.spop(from: self.id, max: count)
201 |             .map { $0.compactMap(Element.init) }
[735/741] Emitting module RedisTypes
[736/742] Compiling RediStackTestUtils RediStack.swift
[737/742] Compiling RediStackTestUtils RedisConnectionPoolIntegrationTestCase.swift
/host/spi-builder-workspace/Sources/RediStackTestUtils/RedisConnectionPoolIntegrationTestCase.swift:67:57: warning: type 'RESPValue' does not conform to the 'Sendable' protocol
 65 |     open override func tearDown() {
 66 |         do {
 67 |             _ = try self.pool.send(command: "FLUSHALL").wait()
    |                                                         `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol
 68 |         } catch let err as RedisConnectionPoolError where err == .poolClosed {
 69 |             // Ok, this is fine.
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: enum 'RESPValue' does not conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: enum 'RESPValue' does not conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStackTestUtils/RedisConnectionPoolIntegrationTestCase.swift:17:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'RediStack'
 15 | import NIOCore
 16 | import NIOPosix
 17 | import RediStack
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'RediStack'
 18 | import XCTest
 19 |
[738/742] Compiling RediStackTestUtils RedisIntegrationTestCase.swift
/host/spi-builder-workspace/Sources/RediStackTestUtils/RedisIntegrationTestCase.swift:69:37: warning: capture of 'self' with non-sendable type 'RedisIntegrationTestCase' in a '@Sendable' closure
21 | ///
22 | /// See `RedisConnection.make(configuration:boundEventLoop:)` to understand how connections are made.
23 | open class RedisIntegrationTestCase: XCTestCase {
   |            `- note: class 'RedisIntegrationTestCase' does not conform to the 'Sendable' protocol
24 |     /// An overridable value of the Redis instance's hostname to connect to for the test suite(s).
25 |     ///
   :
67 |             if self.connection.isConnected {
68 |                 _ = try self.connection.send(command: "FLUSHALL")
69 |                     .flatMap { _ in self.connection.close() }
   |                                     `- warning: capture of 'self' with non-sendable type 'RedisIntegrationTestCase' in a '@Sendable' closure
70 |                     .wait()
71 |             }
/host/spi-builder-workspace/Sources/RediStackTestUtils/RedisIntegrationTestCase.swift:91:11: warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
89 |             ),
90 |             boundEventLoop: eventLoopGroup.next()
91 |         ).wait()
   |           `- warning: type 'RedisConnection' does not conform to the 'Sendable' protocol
92 |     }
93 | }
/host/spi-builder-workspace/Sources/RediStack/RedisConnection.swift:88:20: note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 86 | ///
 87 | /// Note: `wait()` is used in the example for simplicity. Never call `wait()` on an event loop.
 88 | public final class RedisConnection: RedisClient, RedisClientWithUserContext {
    |                    `- note: class 'RedisConnection' does not conform to the 'Sendable' protocol
 89 |     /// A unique identifer to represent this connection.
 90 |     public let id = UUID()
/host/spi-builder-workspace/Sources/RediStackTestUtils/RedisIntegrationTestCase.swift:17:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'RediStack'
15 | import NIOCore
16 | import NIOPosix
17 | import RediStack
   | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'RediStack'
18 | import XCTest
19 |
[739/742] Compiling RediStackTestUtils General.swift
[740/742] Compiling RediStackTestUtils EmbeddedMockRedisServer.swift
/host/spi-builder-workspace/Sources/RediStackTestUtils/EmbeddedMockRedisServer.swift:62:34: warning: type 'RESPValue' does not conform to the 'Sendable' protocol
 60 |             // We always allow this.
 61 |             let response = RESPValue.simpleString("OK".byteBuffer)
 62 |             data.responsePromise.succeed(response)
    |                                  `- warning: type 'RESPValue' does not conform to the 'Sendable' protocol
 63 |
 64 |         default:
/host/spi-builder-workspace/Sources/RediStack/RESP/RESPValue.swift:30:13: note: enum 'RESPValue' does not conform to the 'Sendable' protocol
 28 | ///
 29 | /// See: [https://redis.io/topics/protocol](https://redis.io/topics/protocol)
 30 | public enum RESPValue {
    |             `- note: enum 'RESPValue' does not conform to the 'Sendable' protocol
 31 |     case null
 32 |     case simpleString(ByteBuffer)
/host/spi-builder-workspace/Sources/RediStackTestUtils/EmbeddedMockRedisServer.swift:17:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'RediStack'
 15 | import NIOCore
 16 | import NIOEmbedded
 17 | import RediStack
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'RediStack'
 18 | import XCTest
 19 |
/host/spi-builder-workspace/Sources/RediStackTestUtils/EmbeddedMockRedisServer.swift:73:13: warning: capture of 'self' with non-sendable type 'EmbeddedMockRedisServer' in a '@Sendable' closure
 26 | /// This is not really a Redis server: it's just something that lets us stub out the connection management in order to let
 27 | /// us test the connection pool.
 28 | internal final class EmbeddedMockRedisServer {
    |                      `- note: class 'EmbeddedMockRedisServer' does not conform to the 'Sendable' protocol
 29 |     var channels: ArraySlice<EmbeddedChannel> = []
 30 |     var loop: EmbeddedEventLoop = EmbeddedEventLoop()
    :
 71 |         let channel = EmbeddedChannel(handler: GracefulShutdownToCloseHandler(), loop: self.loop)
 72 |         channel.closeFuture.whenComplete { _ in
 73 |             self.channels.removeAll(where: { $0 === channel })
    |             `- warning: capture of 'self' with non-sendable type 'EmbeddedMockRedisServer' in a '@Sendable' closure
 74 |         }
 75 |
[741/742] Emitting module RediStackTestUtils
Build complete! (205.80s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-atomics",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.1.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-atomics.git"
    },
    {
      "identity" : "swift-log",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-log.git"
    },
    {
      "identity" : "swift-metrics",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.0",
            "upper_bound" : "3.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-metrics.git"
    },
    {
      "identity" : "swift-nio",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "2.43.0",
            "upper_bound" : "3.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-nio.git"
    },
    {
      "identity" : "swift-nio-ssl",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "2.23.1",
            "upper_bound" : "3.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-nio-ssl.git"
    }
  ],
  "manifest_display_name" : "RediStack",
  "name" : "RediStack",
  "path" : "/host/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "RediStack",
      "targets" : [
        "RediStack"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "RediStackTestUtils",
      "targets" : [
        "RediStackTestUtils"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "RedisTypes",
      "targets" : [
        "RedisTypes"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "RedisTypesTests",
      "module_type" : "SwiftTarget",
      "name" : "RedisTypesTests",
      "path" : "Tests/RedisTypesTests",
      "product_dependencies" : [
        "NIO"
      ],
      "sources" : [
        "RedisSetTests.swift",
        "RedisTypesIntegrationTestCase.swift"
      ],
      "target_dependencies" : [
        "RediStack",
        "RedisTypes",
        "RediStackTestUtils"
      ],
      "type" : "test"
    },
    {
      "c99name" : "RedisTypes",
      "module_type" : "SwiftTarget",
      "name" : "RedisTypes",
      "path" : "Sources/RedisTypes",
      "product_memberships" : [
        "RedisTypes"
      ],
      "sources" : [
        "RedisSet.swift"
      ],
      "target_dependencies" : [
        "RediStack"
      ],
      "type" : "library"
    },
    {
      "c99name" : "RediStackTests",
      "module_type" : "SwiftTarget",
      "name" : "RediStackTests",
      "path" : "Tests/RediStackTests",
      "product_dependencies" : [
        "Atomics",
        "NIO",
        "NIOTestUtils"
      ],
      "sources" : [
        "ChannelHandlers/RedisByteDecoderTests.swift",
        "ChannelHandlers/RedisCommandHandlerTests.swift",
        "ChannelHandlers/RedisMessageEncoderTests.swift",
        "Cluster/RedisClusterNodeDescriptionProtocolTests.swift",
        "ConfigurationTests.swift",
        "ConnectionPoolTests.swift",
        "Helpers/MockNodeDescription.swift",
        "Helpers/RedisErrorTests.swift",
        "RESPTranslatorTests.swift",
        "RESPValueTests.swift",
        "RedisCommandEncoderTests.swift",
        "RedisConnection+ConfigurationTests.swift",
        "RedisConnectionTests.swift",
        "RedisHashSlotTests.swift",
        "RedisKeyLifetime.swift"
      ],
      "target_dependencies" : [
        "RediStack",
        "RediStackTestUtils"
      ],
      "type" : "test"
    },
    {
      "c99name" : "RediStackTestUtils",
      "module_type" : "SwiftTarget",
      "name" : "RediStackTestUtils",
      "path" : "Sources/RediStackTestUtils",
      "product_dependencies" : [
        "NIOCore",
        "NIOEmbedded"
      ],
      "product_memberships" : [
        "RediStackTestUtils"
      ],
      "sources" : [
        "EmbeddedMockRedisServer.swift",
        "Extensions/General.swift",
        "Extensions/RediStack.swift",
        "RedisConnectionPoolIntegrationTestCase.swift",
        "RedisIntegrationTestCase.swift",
        "_Deprecations.swift"
      ],
      "target_dependencies" : [
        "RediStack"
      ],
      "type" : "library"
    },
    {
      "c99name" : "RediStackIntegrationTests",
      "module_type" : "SwiftTarget",
      "name" : "RediStackIntegrationTests",
      "path" : "Tests/RediStackIntegrationTests",
      "product_dependencies" : [
        "NIO"
      ],
      "sources" : [
        "Commands/BasicCommandsTests.swift",
        "Commands/HashCommandsTests.swift",
        "Commands/ListCommandsTests.swift",
        "Commands/PubSubCommandsTests.swift",
        "Commands/SetCommandsTests.swift",
        "Commands/SortedSetCommandsTests.swift",
        "Commands/StringCommandsTests.swift",
        "RediStackIntegrationTestCase.swift",
        "RedisConnectionPoolTests.swift",
        "RedisConnectionTests.swift",
        "RedisLoggingTests.swift"
      ],
      "target_dependencies" : [
        "RediStack",
        "RediStackTestUtils"
      ],
      "type" : "test"
    },
    {
      "c99name" : "RediStack",
      "module_type" : "SwiftTarget",
      "name" : "RediStack",
      "path" : "Sources/RediStack",
      "product_dependencies" : [
        "NIOCore",
        "NIOPosix",
        "NIO",
        "NIOConcurrencyHelpers",
        "NIOSSL",
        "Atomics",
        "Logging",
        "Metrics"
      ],
      "product_memberships" : [
        "RediStack",
        "RediStackTestUtils",
        "RedisTypes"
      ],
      "sources" : [
        "ChannelHandlers/RedisByteDecoder.swift",
        "ChannelHandlers/RedisCommandHandler.swift",
        "ChannelHandlers/RedisMessageEncoder.swift",
        "ChannelHandlers/RedisPubSubHandler.swift",
        "Cluster/RedisClusterNodeDescriptionProtocol.swift",
        "Cluster/RedisClusterNodeID.swift",
        "Cluster/RedisClusterShardDescriptionProtocol.swift",
        "Cluster/RedisHashSlot.swift",
        "Cluster/SwiftPolyfill.swift",
        "Commands/BasicCommands.swift",
        "Commands/HashCommands.swift",
        "Commands/ListCommands.swift",
        "Commands/PubSubCommands.swift",
        "Commands/SetCommands.swift",
        "Commands/SortedSetCommands.swift",
        "Commands/StringCommands.swift",
        "ConnectionPool/ConnectionPool.swift",
        "ConnectionPool/RedisConnectionPool+Configuration.swift",
        "ConnectionPool/RedisConnectionPool.swift",
        "ConnectionPool/RedisConnectionPoolError.swift",
        "Extensions/StandardLibrary.swift",
        "Extensions/SwiftNIO.swift",
        "RESP/RESPTranslator.swift",
        "RESP/RESPValue.swift",
        "RESP/RESPValueConvertible.swift",
        "RedisChannelName.swift",
        "RedisClient.swift",
        "RedisCommandEncoder-multi-encode.swift",
        "RedisCommandEncoder.swift",
        "RedisConnection+Configuration.swift",
        "RedisConnection.swift",
        "RedisError.swift",
        "RedisKey+TTL.swift",
        "RedisKey.swift",
        "RedisLogging.swift",
        "RedisMetrics.swift",
        "_Deprecations.swift"
      ],
      "type" : "library"
    },
    {
      "c99name" : "RESP3Tests",
      "module_type" : "SwiftTarget",
      "name" : "RESP3Tests",
      "path" : "Tests/RESP3Tests",
      "product_dependencies" : [
        "NIOCore",
        "NIOEmbedded",
        "NIOTestUtils"
      ],
      "sources" : [
        "RESP3TokenTests.swift"
      ],
      "target_dependencies" : [
        "RESP3"
      ],
      "type" : "test"
    },
    {
      "c99name" : "RESP3",
      "module_type" : "SwiftTarget",
      "name" : "RESP3",
      "path" : "Sources/RESP3",
      "product_dependencies" : [
        "NIOCore"
      ],
      "sources" : [
        "RESP3Error.swift",
        "RESP3Token.swift",
        "RESP3TokenDecoder.swift",
        "RESP3TypeIdentifier.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.6"
}
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:873b43b7be6289c04a5a3fd4b2c372c2a5abf90643451079297d3dc6dc0b7d36
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
Done.