diff --git a/Sources/XXClient/Callbacks/TrackServicesCallback.swift b/Sources/XXClient/Callbacks/TrackServicesCallback.swift index 44a8c5ff214855cc96c6e9b9cdc12d2c0ec49190..c84a996b0ce48c2b8eb045b386a209c1f9244c8e 100644 --- a/Sources/XXClient/Callbacks/TrackServicesCallback.swift +++ b/Sources/XXClient/Callbacks/TrackServicesCallback.swift @@ -2,11 +2,11 @@ import Bindings import XCTestDynamicOverlay public struct TrackServicesCallback { - public init(handle: @escaping (Result<[TrackServicesCallbackResult], Error>) -> Void) { + public init(handle: @escaping (Result<MessageServiceList, Error>) -> Void) { self.handle = handle } - public var handle: (Result<[TrackServicesCallbackResult], Error>) -> Void + public var handle: (Result<MessageServiceList, Error>) -> Void } extension TrackServicesCallback { @@ -31,7 +31,7 @@ extension TrackServicesCallback { } if let marshalData = marshalData { do { - callback.handle(.success(try [TrackServicesCallbackResult].decode(marshalData))) + callback.handle(.success(try MessageServiceList.decode(marshalData))) } catch { callback.handle(.failure(error)) } diff --git a/Sources/XXClient/Models/TrackServicesCallbackResult.swift b/Sources/XXClient/Models/MessageServiceList.swift similarity index 76% rename from Sources/XXClient/Models/TrackServicesCallbackResult.swift rename to Sources/XXClient/Models/MessageServiceList.swift index 03ea8490ae654075d018450504c66f546db88c79..47e83d56b2c7b00c77e65ebb5da22c3a20ac5401 100644 --- a/Sources/XXClient/Models/TrackServicesCallbackResult.swift +++ b/Sources/XXClient/Models/MessageServiceList.swift @@ -1,6 +1,18 @@ import Foundation -public struct TrackServicesCallbackResult: Equatable { +public typealias MessageServiceList = Array<MessageServiceListElement> + +extension MessageServiceList { + public static func decode(_ data: Data) throws -> Self { + try JSONDecoder().decode(Self.self, from: data) + } + + public func encode() throws -> Data { + try JSONEncoder().encode(self) + } +} + +public struct MessageServiceListElement: Equatable { public init(id: Data, services: [MessageService]) { self.id = id self.services = services @@ -10,7 +22,7 @@ public struct TrackServicesCallbackResult: Equatable { public var services: [MessageService] } -extension TrackServicesCallbackResult: Codable { +extension MessageServiceListElement: Codable { enum CodingKeys: String, CodingKey { case id = "Id" case services = "Services" @@ -24,13 +36,3 @@ extension TrackServicesCallbackResult: Codable { try JSONEncoder().encode(self) } } - -extension Array where Element == TrackServicesCallbackResult { - 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/XXClientTests/Models/TrackServicesCallbackResultTests.swift b/Tests/XXClientTests/Models/MessageServiceListTests.swift similarity index 74% rename from Tests/XXClientTests/Models/TrackServicesCallbackResultTests.swift rename to Tests/XXClientTests/Models/MessageServiceListTests.swift index 855e23104da530e38d7c067d51363a30e9e2e719..027344343aa3f66137c6258f4e81e4a51d0dd3a0 100644 --- a/Tests/XXClientTests/Models/TrackServicesCallbackResultTests.swift +++ b/Tests/XXClientTests/Models/MessageServiceListTests.swift @@ -2,8 +2,43 @@ import CustomDump import XCTest @testable import XXClient -final class TrackServicesCallbackResultTests: XCTestCase { +final class MessageServiceListTests: XCTestCase { func testCoding() throws { + let model: MessageServiceList = [ + MessageServiceListElement( + id: "id1".data(using: .utf8)!, + services: [ + MessageService( + identifier: "service1-id".data(using: .utf8)!, + tag: "service1-tag", + metadata: "service1-metadata".data(using: .utf8)! + ), + ] + ), + MessageServiceListElement( + id: "id2".data(using: .utf8)!, + services: [ + MessageService( + identifier: "service2-id".data(using: .utf8)!, + tag: "service2-tag", + metadata: "service2-metadata".data(using: .utf8)! + ), + MessageService( + identifier: "service3-id".data(using: .utf8)!, + tag: "service3-tag", + metadata: "service3-metadata".data(using: .utf8)! + ), + ] + ), + ] + + let encodedModels = try model.encode() + let decodedModels = try MessageServiceList.decode(encodedModels) + + XCTAssertNoDifference(model, decodedModels) + } + + func testElementCoding() throws { let idB64 = "AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD" let serviceIdentifierB64 = "AQID" let serviceTag = "TestTag 2" @@ -21,9 +56,9 @@ final class TrackServicesCallbackResultTests: XCTestCase { } """ let jsonData = jsonString.data(using: .utf8)! - let model = try TrackServicesCallbackResult.decode(jsonData) + let model = try MessageServiceListElement.decode(jsonData) - XCTAssertNoDifference(model, TrackServicesCallbackResult( + XCTAssertNoDifference(model, MessageServiceListElement( id: Data(base64Encoded: idB64)!, services: [ MessageService( @@ -35,43 +70,8 @@ final class TrackServicesCallbackResultTests: XCTestCase { )) let encodedModel = try model.encode() - let decodedModel = try TrackServicesCallbackResult.decode(encodedModel) + let decodedModel = try MessageServiceListElement.decode(encodedModel) XCTAssertNoDifference(decodedModel, model) } - - func testCodingArray() throws { - let models = [ - TrackServicesCallbackResult( - id: "id1".data(using: .utf8)!, - services: [ - MessageService( - identifier: "service1-id".data(using: .utf8)!, - tag: "service1-tag", - metadata: "service1-metadata".data(using: .utf8)! - ), - ] - ), - TrackServicesCallbackResult( - id: "id2".data(using: .utf8)!, - services: [ - MessageService( - identifier: "service2-id".data(using: .utf8)!, - tag: "service2-tag", - metadata: "service2-metadata".data(using: .utf8)! - ), - MessageService( - identifier: "service3-id".data(using: .utf8)!, - tag: "service3-tag", - metadata: "service3-metadata".data(using: .utf8)! - ), - ] - ), - ] - - let encodedModels = try models.encode() - let decodedModels = try [TrackServicesCallbackResult].decode(encodedModels) - - XCTAssertNoDifference(models, decodedModels) - } }