From c0832083bf943c464580db5e087dadbf24bb7d25 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 25 Jul 2022 19:03:43 +0100
Subject: [PATCH] Add RestlikeMessage model

---
 .../{Legacy => }/RestlikeMessage.swift        |  8 ++++
 .../RestlikeMessageTests.swift                | 41 ++++++++++---------
 2 files changed, 30 insertions(+), 19 deletions(-)
 rename Sources/ElixxirDAppsSDK/{Legacy => }/RestlikeMessage.swift (79%)

diff --git a/Sources/ElixxirDAppsSDK/Legacy/RestlikeMessage.swift b/Sources/ElixxirDAppsSDK/RestlikeMessage.swift
similarity index 79%
rename from Sources/ElixxirDAppsSDK/Legacy/RestlikeMessage.swift
rename to Sources/ElixxirDAppsSDK/RestlikeMessage.swift
index 884afde1..414a74b4 100644
--- a/Sources/ElixxirDAppsSDK/Legacy/RestlikeMessage.swift
+++ b/Sources/ElixxirDAppsSDK/RestlikeMessage.swift
@@ -34,4 +34,12 @@ extension RestlikeMessage: Codable {
     case uri = "URI"
     case error = "Error"
   }
+
+  static func decode(_ data: Data) throws -> RestlikeMessage {
+    try JSONDecoder().decode(Self.self, from: data)
+  }
+
+  func encode() throws -> Data {
+    try JSONEncoder().encode(self)
+  }
 }
diff --git a/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift b/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift
index 164fce5b..c8e343ce 100644
--- a/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift
+++ b/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift
@@ -4,34 +4,37 @@ import XCTest
 
 final class RestlikeMessageTests: XCTestCase {
   func testCoding() throws {
+    let version: Int = 1
+    let headersString = "Y29udGVudHM6YXBwbGljYXRpb24vanNvbg=="
+    let contentString = "VGhpcyBpcyBhIHJlc3RsaWtlIG1lc3NhZ2U="
+    let method: Int = 2
+    let uri = "xx://CmixRestlike/rest"
+    let error = ""
     let jsonString = """
     {
-      "Version": 1,
-      "Headers": "Y29udGVudHM6YXBwbGljYXRpb24vanNvbg==",
-      "Content": "VGhpcyBpcyBhIHJlc3RsaWtlIG1lc3NhZ2U=",
-      "Method": 2,
-      "URI": "xx://CmixRestlike/rest",
-      "Error": ""
+      "Version": \(version),
+      "Headers": "\(headersString)",
+      "Content": "\(contentString)",
+      "Method": \(method),
+      "URI": "\(uri)",
+      "Error": "\(error)"
     }
     """
     let jsonData = jsonString.data(using: .utf8)!
-    let decoder = JSONDecoder()
-    decoder.dataDecodingStrategy = .base64
-    let message = try decoder.decode(RestlikeMessage.self, from: jsonData)
+
+    let message = try RestlikeMessage.decode(jsonData)
 
     XCTAssertNoDifference(message, RestlikeMessage(
-      version: 1,
-      headers: Data(base64Encoded: "Y29udGVudHM6YXBwbGljYXRpb24vanNvbg==")!,
-      content: Data(base64Encoded: "VGhpcyBpcyBhIHJlc3RsaWtlIG1lc3NhZ2U=")!,
-      method: 2,
-      uri: "xx://CmixRestlike/rest",
-      error: ""
+      version: version,
+      headers: Data(base64Encoded: headersString)!,
+      content: Data(base64Encoded: contentString)!,
+      method: method,
+      uri: uri,
+      error: error
     ))
 
-    let encoder = JSONEncoder()
-    encoder.dataEncodingStrategy = .base64
-    let encodedMessage = try encoder.encode(message)
-    let decodedMessage = try decoder.decode(RestlikeMessage.self, from: encodedMessage)
+    let encodedMessage = try message.encode()
+    let decodedMessage = try RestlikeMessage.decode(encodedMessage)
 
     XCTAssertNoDifference(decodedMessage, message)
   }
-- 
GitLab