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) }