@@ -7,79 +7,79 @@ public enum DotcomError: Error, Decodable, Equatable, GeneratedFakeable {
77
88 /// Non explicit reason
99 ///
10- case empty
10+ case empty( data : [ String : AnyDecodable ] ? = nil )
1111
1212 /// Missing Token!
1313 ///
14- case unauthorized
14+ case unauthorized( data : [ String : AnyDecodable ] ? = nil )
1515
1616 /// We're not properly authenticated
1717 ///
18- case invalidToken
18+ case invalidToken( data : [ String : AnyDecodable ] ? = nil )
1919
2020 /// Remote Request Failed
2121 ///
22- case requestFailed
22+ case requestFailed( data : [ String : AnyDecodable ] ? = nil )
2323
2424 /// No route was found matching the URL and request method
2525 ///
26- case noRestRoute
26+ case noRestRoute( data : [ String : AnyDecodable ] ? = nil )
2727
2828 /// Jetpack is not connected
2929 ///
3030 /// This can be caused by an `unknown_token` error from Jetpack
3131 /// or an `invalid_blog` error from WordPress.com Stats.
3232 ///
33- case jetpackNotConnected
33+ case jetpackNotConnected( data : [ String : AnyDecodable ] ? = nil )
3434
3535 /// Unknown: Represents an unmapped remote error. Capisce?
3636 ///
37- case unknown( code: String , message: String ? )
37+ case unknown( code: String , message: String ? , data : [ String : AnyDecodable ] ? )
3838
3939 /// Stats error cases - API documentation of possible errors:
4040 /// https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/stats/
4141 /// Note: when the cases get large, consider refactoring them into a separate error enum that conforms to a Dotcom error protocol
4242
4343 /// No permission to view site stats
44- case noStatsPermission
44+ case noStatsPermission( data : [ String : AnyDecodable ] ? = nil )
4545
4646 /// Jetpack site stats module disabled
47- case statsModuleDisabled
47+ case statsModuleDisabled( data : [ String : AnyDecodable ] ? = nil )
4848
4949 /// The requested resourced does not exist remotely
50- case resourceDoesNotExist
50+ case resourceDoesNotExist( data : [ String : AnyDecodable ] ? = nil )
5151
5252 /// Decodable Initializer.
5353 ///
5454 public init ( from decoder: Decoder ) throws {
5555 let container = try decoder. container ( keyedBy: CodingKeys . self)
5656 let error = try container. decode ( String . self, forKey: . error)
5757 let message = try container. decodeIfPresent ( String . self, forKey: . message)
58+ let data = try container. decodeIfPresent ( [ String : AnyDecodable ] . self, forKey: . data)
5859
5960 switch error {
6061 case Constants . invalidToken:
61- self = . invalidToken
62+ self = . invalidToken( data : data )
6263 case Constants . requestFailed:
63- self = . requestFailed
64+ self = . requestFailed( data : data )
6465 case Constants . unauthorized where message == ErrorMessages . noStatsPermission:
65- self = . noStatsPermission
66+ self = . noStatsPermission( data : data )
6667 case Constants . unauthorized:
67- self = . unauthorized
68+ self = . unauthorized( data : data )
6869 case Constants . noRestRoute:
69- self = . noRestRoute
70+ self = . noRestRoute( data : data )
7071 case Constants . invalidBlog where message == ErrorMessages . statsModuleDisabled:
71- self = . statsModuleDisabled
72+ self = . statsModuleDisabled( data : data )
7273 case Constants . restTermInvalid where message == ErrorMessages . resourceDoesNotExist:
73- self = . resourceDoesNotExist
74+ self = . resourceDoesNotExist( data : data )
7475 case Constants . unknownToken,
7576 Constants . invalidBlog where message == ErrorMessages . jetpackNotConnected:
76- self = . jetpackNotConnected
77+ self = . jetpackNotConnected( data : data )
7778 default :
78- self = . unknown( code: error, message: message)
79+ self = . unknown( code: error, message: message, data : data )
7980 }
8081 }
8182
82-
8383 /// Constants for Possible Error Identifiers
8484 ///
8585 private enum Constants {
@@ -97,6 +97,7 @@ public enum DotcomError: Error, Decodable, Equatable, GeneratedFakeable {
9797 private enum CodingKeys : String , CodingKey {
9898 case error
9999 case message
100+ case data
100101 }
101102
102103 /// Possible Error Messages
@@ -134,7 +135,7 @@ extension DotcomError: CustomStringConvertible {
134135 return NSLocalizedString ( " Dotcom Resource does not exist " , comment: " WordPress.com error thrown when a requested resource does not exist remotely. " )
135136 case . jetpackNotConnected:
136137 return NSLocalizedString ( " Jetpack Not Connected " , comment: " WordPress.com error thrown when Jetpack is not connected. " )
137- case . unknown( let code, let message) :
138+ case . unknown( let code, let message, _ ) :
138139 let theMessage = message ?? String ( )
139140 let messageFormat = NSLocalizedString (
140141 " Dotcom Error: [%1$@] %2$@ " ,
@@ -150,14 +151,17 @@ extension DotcomError: CustomStringConvertible {
150151//
151152public func == ( lhs: DotcomError , rhs: DotcomError ) -> Bool {
152153 switch ( lhs, rhs) {
153- case ( . requestFailed , . requestFailed ) ,
154+ case ( . empty , . empty ) ,
154155 ( . unauthorized, . unauthorized) ,
156+ ( . invalidToken, . invalidToken) ,
157+ ( . requestFailed, . requestFailed) ,
155158 ( . noRestRoute, . noRestRoute) ,
159+ ( . jetpackNotConnected, . jetpackNotConnected) ,
156160 ( . noStatsPermission, . noStatsPermission) ,
157161 ( . statsModuleDisabled, . statsModuleDisabled) ,
158- ( . jetpackNotConnected , . jetpackNotConnected ) :
162+ ( . resourceDoesNotExist , . resourceDoesNotExist ) :
159163 return true
160- case let ( . unknown( codeLHS, _) , . unknown( codeRHS, _) ) :
164+ case let ( . unknown( codeLHS, _, _ ) , . unknown( codeRHS, _ , _) ) :
161165 return codeLHS == codeRHS
162166 default :
163167 return false
0 commit comments