@@ -199,15 +199,12 @@ public final actor ValkeyConnection: ValkeyClientProtocol, Sendable {
199
199
}
200
200
} catch let error as ValkeyClientError {
201
201
#if DistributedTracingSupport
202
- span? . recordError ( error )
203
- if let message = error . message {
204
- var prefixEndIndex = message . startIndex
205
- while prefixEndIndex < message . endIndex , message [ prefixEndIndex ] != " " {
206
- message . formIndex ( after : & prefixEndIndex )
202
+ if let span {
203
+ span . recordError ( error )
204
+ span . setStatus ( SpanStatus ( code : . error ) )
205
+ if let prefix = error . simpleErrorPrefix {
206
+ span . attributes [ " db.response.status_code " ] = " \( prefix ) "
207
207
}
208
- let prefix = message [ message. startIndex..< prefixEndIndex]
209
- span? . attributes [ " db.response.status_code " ] = " \( prefix) "
210
- span? . setStatus ( SpanStatus ( code: . error) )
211
208
}
212
209
#endif
213
210
throw error
@@ -455,3 +452,20 @@ struct AutoIncrementingInteger {
455
452
return value - 1
456
453
}
457
454
}
455
+
456
+ #if DistributedTracingSupport
457
+ extension ValkeyClientError {
458
+ /// Extract the simple error prefix from this error.
459
+ ///
460
+ /// - SeeAlso: [](https://valkey.io/topics/protocol/#simple-errors)
461
+ @usableFromInline
462
+ var simpleErrorPrefix : Substring ? {
463
+ guard let message else { return nil }
464
+ var prefixEndIndex = message. startIndex
465
+ while prefixEndIndex < message. endIndex, message [ prefixEndIndex] != " " {
466
+ message. formIndex ( after: & prefixEndIndex)
467
+ }
468
+ return message [ message. startIndex..< prefixEndIndex]
469
+ }
470
+ }
471
+ #endif
0 commit comments