From 70a210b27615f52eccfd4b80fe02f7d656bedeb0 Mon Sep 17 00:00:00 2001 From: Christian Treffs Date: Thu, 23 Jul 2020 22:04:17 +0200 Subject: [PATCH] Return newly created entities --- Sources/FirebladeECS/Family+Coding.swift | 9 +++++---- .../FirebladeECSTests/FamilyCodingTests.swift | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Sources/FirebladeECS/Family+Coding.swift b/Sources/FirebladeECS/Family+Coding.swift index 2cb764f..692758f 100644 --- a/Sources/FirebladeECS/Family+Coding.swift +++ b/Sources/FirebladeECS/Family+Coding.swift @@ -76,11 +76,12 @@ extension Family where R: FamilyDecoding { /// - Parameters: /// - data: The data decoded by decoder. A unkeyed container of family members (keyed component containers) is expected. /// - decoder: The decoder to use for decoding family member data. Decoder respects the coding strategy set at `nexus.codingStrategy`. - public func decodeMembers(from data: Decoder.Input, using decoder: inout Decoder) throws where Decoder: TopLevelDecoder { + /// - Returns: returns the newly added entities. + @discardableResult + public func decodeMembers(from data: Decoder.Input, using decoder: inout Decoder) throws -> [Entity] where Decoder: TopLevelDecoder { decoder.userInfo[.nexusCodingStrategy] = nexus.codingStrategy let familyMembers = try decoder.decode(FamilyMemberContainer.self, from: data) - for components in familyMembers.components { - createMember(with: components) - } + return familyMembers.components + .map { createMember(with: $0) } } } diff --git a/Tests/FirebladeECSTests/FamilyCodingTests.swift b/Tests/FirebladeECSTests/FamilyCodingTests.swift index 0de9117..8da696f 100644 --- a/Tests/FirebladeECSTests/FamilyCodingTests.swift +++ b/Tests/FirebladeECSTests/FamilyCodingTests.swift @@ -46,8 +46,8 @@ final class FamilyCodingTests: XCTestCase { let family = nexus.family(requires: MyComponent.self) XCTAssertTrue(family.isEmpty) var jsonDecoder = JSONDecoder() - try family.decodeMembers(from: jsonData, using: &jsonDecoder) - + let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder) + XCTAssertEqual(newEntities.count, 2) XCTAssertEqual(family.count, 2) } @@ -96,7 +96,8 @@ final class FamilyCodingTests: XCTestCase { let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self) XCTAssertTrue(family.isEmpty) var jsonDecoder = JSONDecoder() - try family.decodeMembers(from: jsonData, using: &jsonDecoder) + let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder) + XCTAssertEqual(newEntities.count, 2) XCTAssertEqual(family.count, 2) } @@ -150,10 +151,13 @@ final class FamilyCodingTests: XCTestCase { let nexus = Nexus() let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self, Position.self) + let family2 = nexus.family(requiresAll: YourComponent.self, MyComponent.self, excludesAll: Index.self) XCTAssertTrue(family.isEmpty) var jsonDecoder = JSONDecoder() - try family.decodeMembers(from: jsonData, using: &jsonDecoder) + let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder) + XCTAssertEqual(newEntities.count, 2) XCTAssertEqual(family.count, 2) + XCTAssertEqual(family2.count, 2) } func testEncodeFamily4() throws { @@ -218,7 +222,8 @@ final class FamilyCodingTests: XCTestCase { let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self, Position.self, Color.self) XCTAssertTrue(family.isEmpty) var jsonDecoder = JSONDecoder() - try family.decodeMembers(from: jsonData, using: &jsonDecoder) + let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder) + XCTAssertEqual(newEntities.count, 2) XCTAssertEqual(family.count, 2) } @@ -290,7 +295,8 @@ final class FamilyCodingTests: XCTestCase { let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self, Position.self, Color.self, Party.self) XCTAssertTrue(family.isEmpty) var jsonDecoder = JSONDecoder() - try family.decodeMembers(from: jsonData, using: &jsonDecoder) + let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder) + XCTAssertEqual(newEntities.count, 2) XCTAssertEqual(family.count, 2) }