summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/JsonRpc.swift17
1 files changed, 11 insertions, 6 deletions
diff --git a/ios/MullvadVPN/JsonRpc.swift b/ios/MullvadVPN/JsonRpc.swift
index 6c54bf6adb..58a6b01827 100644
--- a/ios/MullvadVPN/JsonRpc.swift
+++ b/ios/MullvadVPN/JsonRpc.swift
@@ -38,8 +38,10 @@ struct JsonRpcRequest: Encodable {
}
}
-class JsonRpcResponseError: Error, Decodable {
- let code: Int
+class JsonRpcResponseError<ResponseCode>: Error, Decodable
+ where ResponseCode: Decodable
+{
+ let code: ResponseCode
let message: String
var localizedDescription: String? {
@@ -53,15 +55,18 @@ class JsonRpcResponseError: Error, Decodable {
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
- code = try container.decode(Int.self, forKey: .code)
+ code = try container.decode(ResponseCode.self, forKey: .code)
message = try container.decode(String.self, forKey: .message)
}
}
-struct JsonRpcResponse<T: Decodable>: Decodable {
+struct JsonRpcResponse<T, ResponseCode>: Decodable
+ where
+ T: Decodable, ResponseCode: Decodable
+{
let version: String
let id: String
- let result: Result<T, JsonRpcResponseError>
+ let result: Result<T, JsonRpcResponseError<ResponseCode>>
private enum CodingKeys: String, CodingKey {
case version = "jsonrpc", id, result, error
@@ -76,7 +81,7 @@ struct JsonRpcResponse<T: Decodable>: Decodable {
if container.contains(.result) {
self.result = .success(try container.decode(T.self, forKey: .result))
} else {
- self.result = .failure(try container.decode(JsonRpcResponseError.self, forKey: .error))
+ self.result = .failure(try container.decode(JsonRpcResponseError<ResponseCode>.self, forKey: .error))
}
}
}