Browse Source

Add cause to GRPCStatus.processingError for uncaught errors (#1356)

Si Beaumont 4 years ago
parent
commit
7dc737b5c1
2 changed files with 11 additions and 6 deletions
  1. 9 4
      Sources/GRPC/GRPCStatus.swift
  2. 2 2
      Sources/GRPC/ServerErrorProcessor.swift

+ 9 - 4
Sources/GRPC/GRPCStatus.swift

@@ -105,10 +105,15 @@ public struct GRPCStatus: Error {
   ///   status code. Use `GRPCStatus.isOk` or check the code directly.
   public static let ok = GRPCStatus(code: .ok, message: nil)
   /// "Internal server error" status.
-  public static let processingError = GRPCStatus(
-    code: .internalError,
-    message: "unknown error processing request"
-  )
+  public static let processingError = Self.processingError(cause: nil)
+
+  public static func processingError(cause: Error?) -> GRPCStatus {
+    return GRPCStatus(
+      code: .internalError,
+      message: "unknown error processing request",
+      cause: cause
+    )
+  }
 }
 
 extension GRPCStatus: Equatable {

+ 2 - 2
Sources/GRPC/ServerErrorProcessor.swift

@@ -44,7 +44,7 @@ internal enum ServerErrorProcessor {
       trailers = [:]
     } else {
       // Eh... well, we don't what status to use. Use a generic one.
-      status = .processingError
+      status = .processingError(cause: error)
       trailers = [:]
     }
 
@@ -84,7 +84,7 @@ internal enum ServerErrorProcessor {
       mergedTrailers = trailers
     } else {
       // Eh... well, we don't what status to use. Use a generic one.
-      status = .processingError
+      status = .processingError(cause: error)
       mergedTrailers = trailers
     }