diff --git a/Sources/ElixxirDAppsSDK/Models/BroadcastMessage.swift b/Sources/ElixxirDAppsSDK/Models/BroadcastMessage.swift new file mode 100644 index 0000000000000000000000000000000000000000..19f311835766b1c95e3225b956d84b34c71cec1f --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Models/BroadcastMessage.swift @@ -0,0 +1,33 @@ +import Foundation + +public struct BroadcastMessage: Equatable { + public init( + roundId: Int, + ephId: [Int], + payload: Data + ) { + self.roundId = roundId + self.ephId = ephId + self.payload = payload + } + + public var roundId: Int + public var ephId: [Int] + public var payload: Data +} + +extension BroadcastMessage: Codable { + enum CodingKeys: String, CodingKey { + case roundId = "RoundID" + case ephId = "EphID" + case payload = "Payload" + } + + public static func decode(_ data: Data) throws -> Self { + try JSONDecoder().decode(Self.self, from: data) + } + + public func encode() throws -> Data { + try JSONEncoder().encode(self) + } +} diff --git a/Tests/ElixxirDAppsSDKTests/Models/BroadcastMessageTests.swift b/Tests/ElixxirDAppsSDKTests/Models/BroadcastMessageTests.swift new file mode 100644 index 0000000000000000000000000000000000000000..f9cac4b927a3f0d0897e2ddcecbc26fe8271746f --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/Models/BroadcastMessageTests.swift @@ -0,0 +1,31 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class BroadcastMessageTests: XCTestCase { + func testCoding() throws { + let roundId: Int = 42 + let ephId: [Int] = [0, 0, 0, 0, 0, 0, 24, 61] + let payloadB64 = "SGVsbG8sIGJyb2FkY2FzdCBmcmllbmRzIQ==" + let jsonString = """ + { + "RoundID": \(roundId), + "EphID": [\(ephId.map { "\($0)" }.joined(separator: ", "))], + "Payload": "\(payloadB64)" + } + """ + let jsonData = jsonString.data(using: .utf8)! + let message = try BroadcastMessage.decode(jsonData) + + XCTAssertNoDifference(message, BroadcastMessage( + roundId: roundId, + ephId: ephId, + payload: Data(base64Encoded: payloadB64)! + )) + + let encodedMessage = try message.encode() + let decodedMessage = try BroadcastMessage.decode(encodedMessage) + + XCTAssertNoDifference(decodedMessage, message) + } +}