File tree Expand file tree Collapse file tree
Application/DevLogInfra/Sources/Common Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77
88import FirebaseCrashlytics
99import Foundation
10+ import Nexa
1011
1112enum FirebaseCrashlyticsHelper {
1213 static func record(
@@ -39,6 +40,11 @@ private extension FirebaseCrashlyticsHelper {
3940 case underlyingCode
4041 }
4142
43+ enum RESTKey : String {
44+ case statusCode = " restStatusCode "
45+ case errorMessage = " restErrorMessage "
46+ }
47+
4248 static func userInfo(
4349 for nsError: NSError ,
4450 error: Error ,
@@ -51,10 +57,43 @@ private extension FirebaseCrashlyticsHelper {
5157 Key . underlyingCode. rawValue: nsError. code
5258 ]
5359
60+ restMetadata ( for: error) . forEach {
61+ userInfo [ $0. key] = $0. value
62+ }
63+
5464 metadata. forEach {
5565 userInfo [ $0. key] = $0. value
5666 }
5767
5868 return userInfo
5969 }
70+
71+ static func restMetadata( for error: Error ) -> [ String : String ] {
72+ guard let error = error as? NXError else { return [ : ] }
73+
74+ switch error {
75+ case let . invalidStatus( statusCode, data) ,
76+ let . server( statusCode, data, underlying: _) :
77+ var metadata = [
78+ RESTKey . statusCode. rawValue: String ( statusCode)
79+ ]
80+
81+ if let message = restErrorMessage ( from: data) {
82+ metadata [ RESTKey . errorMessage. rawValue] = message
83+ }
84+
85+ return metadata
86+ default :
87+ return [ : ]
88+ }
89+ }
90+
91+ private static func restErrorMessage( from data: Data ? ) -> String ? {
92+ struct RESTErrorBody : Decodable {
93+ let message : String ?
94+ }
95+
96+ guard let data else { return nil }
97+ return try ? JSONDecoder ( ) . decode ( RESTErrorBody . self, from: data) . message
98+ }
6099}
You can’t perform that action at this time.
0 commit comments