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