Skip to content

Commit 5fd3f90

Browse files
authored
Add ValkeyCommand.isBlocking (#94)
1 parent 763d8eb commit 5fd3f90

File tree

7 files changed

+35
-1
lines changed

7 files changed

+35
-1
lines changed

Sources/Valkey/Commands/GenericCommands.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,8 @@ public struct WAIT: ValkeyCommand {
838838
self.timeout = timeout
839839
}
840840

841+
public var isBlocking: Bool { true }
842+
841843
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
842844
commandEncoder.encodeArray("WAIT", numreplicas, timeout)
843845
}
@@ -857,6 +859,8 @@ public struct WAITAOF: ValkeyCommand {
857859
self.timeout = timeout
858860
}
859861

862+
public var isBlocking: Bool { true }
863+
860864
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
861865
commandEncoder.encodeArray("WAITAOF", numlocal, numreplicas, timeout)
862866
}

Sources/Valkey/Commands/ListCommands.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public struct BLMOVE: ValkeyCommand {
7272

7373
public var keysAffected: [ValkeyKey] { [source, destination] }
7474

75+
public var isBlocking: Bool { true }
76+
7577
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
7678
commandEncoder.encodeArray("BLMOVE", source, destination, wherefrom, whereto, timeout)
7779
}
@@ -110,6 +112,8 @@ public struct BLMPOP: ValkeyCommand {
110112

111113
public var keysAffected: [ValkeyKey] { key }
112114

115+
public var isBlocking: Bool { true }
116+
113117
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
114118
commandEncoder.encodeArray("BLMPOP", timeout, RESPArrayWithCount(key), `where`, RESPWithToken("COUNT", count))
115119
}
@@ -129,6 +133,8 @@ public struct BLPOP: ValkeyCommand {
129133

130134
public var keysAffected: [ValkeyKey] { key }
131135

136+
public var isBlocking: Bool { true }
137+
132138
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
133139
commandEncoder.encodeArray("BLPOP", key, timeout)
134140
}
@@ -148,6 +154,8 @@ public struct BRPOP: ValkeyCommand {
148154

149155
public var keysAffected: [ValkeyKey] { key }
150156

157+
public var isBlocking: Bool { true }
158+
151159
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
152160
commandEncoder.encodeArray("BRPOP", key, timeout)
153161
}
@@ -169,6 +177,8 @@ public struct BRPOPLPUSH: ValkeyCommand {
169177

170178
public var keysAffected: [ValkeyKey] { [source, destination] }
171179

180+
public var isBlocking: Bool { true }
181+
172182
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
173183
commandEncoder.encodeArray("BRPOPLPUSH", source, destination, timeout)
174184
}

Sources/Valkey/Commands/SortedSetCommands.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ public struct BZMPOP: ValkeyCommand {
5353

5454
public var keysAffected: [ValkeyKey] { key }
5555

56+
public var isBlocking: Bool { true }
57+
5658
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
5759
commandEncoder.encodeArray("BZMPOP", timeout, RESPArrayWithCount(key), `where`, RESPWithToken("COUNT", count))
5860
}
@@ -70,6 +72,8 @@ public struct BZPOPMAX: ValkeyCommand {
7072

7173
public var keysAffected: [ValkeyKey] { key }
7274

75+
public var isBlocking: Bool { true }
76+
7377
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
7478
commandEncoder.encodeArray("BZPOPMAX", key, timeout)
7579
}
@@ -87,6 +91,8 @@ public struct BZPOPMIN: ValkeyCommand {
8791

8892
public var keysAffected: [ValkeyKey] { key }
8993

94+
public var isBlocking: Bool { true }
95+
9096
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
9197
commandEncoder.encodeArray("BZPOPMIN", key, timeout)
9298
}

Sources/Valkey/Commands/StreamCommands.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,8 @@ public struct XREAD<Id: RESPStringRenderable>: ValkeyCommand {
630630
self.streams = streams
631631
}
632632

633+
public var isBlocking: Bool { true }
634+
633635
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
634636
commandEncoder.encodeArray("XREAD", RESPWithToken("COUNT", count), RESPWithToken("BLOCK", milliseconds), RESPWithToken("STREAMS", streams))
635637
}
@@ -695,6 +697,8 @@ public struct XREADGROUP<Group: RESPStringRenderable, Consumer: RESPStringRender
695697
self.streams = streams
696698
}
697699

700+
public var isBlocking: Bool { true }
701+
698702
@inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {
699703
commandEncoder.encodeArray("XREADGROUP", RESPWithToken("GROUP", groupBlock), RESPWithToken("COUNT", count), RESPWithToken("BLOCK", milliseconds), RESPPureToken("NOACK", noack), RESPWithToken("STREAMS", streams))
700704
}

Sources/Valkey/ValkeyCommand.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ public protocol ValkeyCommand: Sendable {
2323
/// shard to connect to.
2424
var keysAffected: Keys { get }
2525

26+
/// Does this command block the connection
27+
var isBlocking: Bool { get }
28+
2629
/// Encode Valkey Command into RESP
2730
/// - Parameter commandEncoder: ValkeyCommandEncoder
2831
func encode(into commandEncoder: inout ValkeyCommandEncoder)
@@ -31,6 +34,8 @@ public protocol ValkeyCommand: Sendable {
3134
extension ValkeyCommand {
3235
/// Default to no keys affected
3336
public var keysAffected: [ValkeyKey] { [] }
37+
/// Default is not blocking
38+
public var isBlocking: Bool { false }
3439
}
3540

3641
/// Wrapper for Valkey command that returns the response as a `RESPToken`

Sources/_ValkeyCommandsBuilder/ValkeyCommandJSON.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ struct ValkeyCommand: Decodable {
305305
let deprecatedSince: String?
306306
let replacedBy: String?
307307
let docFlags: [String]?
308+
let commandFlags: [String]?
308309
let aclCategories: [String]?
309310
let arguments: [Argument]?
310311
let replySchema: ReplySchema?
@@ -320,6 +321,7 @@ struct ValkeyCommand: Decodable {
320321
self.deprecatedSince = try container.decodeIfPresent(String.self, forKey: .deprecatedSince)
321322
self.replacedBy = try container.decodeIfPresent(String.self, forKey: .replacedBy)
322323
self.docFlags = try container.decodeIfPresent([String].self, forKey: .docFlags)
324+
self.commandFlags = try container.decodeIfPresent([String].self, forKey: .commandFlags)
323325
self.aclCategories = try container.decodeIfPresent([String].self, forKey: .aclCategories)
324326
if let arguments = try container.decodeIfPresent([InternalArgument].self, forKey: .arguments) {
325327
if let keySpecs = try container.decodeIfPresent([KeySpec].self, forKey: .keySpecs) {
@@ -352,6 +354,7 @@ struct ValkeyCommand: Decodable {
352354
case deprecatedSince = "deprecated_since"
353355
case replacedBy = "replaced_by"
354356
case docFlags = "doc_flags"
357+
case commandFlags = "command_flags"
355358
case aclCategories = "acl_categories"
356359
case arguments
357360
case replySchema = "reply_schema"

Sources/_ValkeyCommandsBuilder/ValkeyCommandsRender.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,9 @@ extension String {
258258
let (keysAffectedType, keysAffected) = constructKeysAffected(keyArguments)
259259
self.append("\(tab) public var keysAffected: \(keysAffectedType) { \(keysAffected) }\n\n")
260260
}
261-
261+
if command.commandFlags?.contains("BLOCKING") == true {
262+
self.append("\(tab) public var isBlocking: Bool { true }\n\n")
263+
}
262264
self.append("\(tab) @inlinable public func encode(into commandEncoder: inout ValkeyCommandEncoder) {\n")
263265
self.append("\(tab) commandEncoder.encodeArray(\(commandArgumentsString))\n")
264266
self.append("\(tab) }\n")

0 commit comments

Comments
 (0)