From d5f4d626e84c093b397a99e9ceef975ba5efeb54 Mon Sep 17 00:00:00 2001 From: Kenta Kubo Date: Thu, 21 May 2020 01:35:27 +0900 Subject: [PATCH 1/4] Make TopLevelEncoder implementation overridable --- Sources/XMLCoder/Decoder/XMLDecoder.swift | 7 +------ Sources/XMLCoder/Encoder/XMLEncoder.swift | 6 ++++++ Tests/XMLCoderTests/CombineTests.swift | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Sources/XMLCoder/Decoder/XMLDecoder.swift b/Sources/XMLCoder/Decoder/XMLDecoder.swift index ed90218b..f110ee64 100644 --- a/Sources/XMLCoder/Decoder/XMLDecoder.swift +++ b/Sources/XMLCoder/Decoder/XMLDecoder.swift @@ -382,10 +382,5 @@ import protocol OpenCombine.TopLevelEncoder #if canImport(Combine) || canImport(OpenCombine) extension XMLDecoder: TopLevelDecoder {} - -extension XMLEncoder: TopLevelEncoder { - public func encode(_ value: T) throws -> Data where T: Encodable { - try encode(value, withRootKey: nil, rootAttributes: nil, header: nil) - } -} +extension XMLEncoder: TopLevelEncoder {} #endif diff --git a/Sources/XMLCoder/Encoder/XMLEncoder.swift b/Sources/XMLCoder/Encoder/XMLEncoder.swift index db1ff7cc..de8f8c51 100644 --- a/Sources/XMLCoder/Encoder/XMLEncoder.swift +++ b/Sources/XMLCoder/Encoder/XMLEncoder.swift @@ -376,6 +376,12 @@ open class XMLEncoder { return element.toXMLString(with: header, formatting: outputFormatting) .data(using: .utf8, allowLossyConversion: true)! } + + // MARK: - TopLevelEncoder + + open func encode(_ value: T) throws -> Data where T: Encodable { + try encode(value, withRootKey: nil, rootAttributes: nil, header: nil) + } } private extension String { diff --git a/Tests/XMLCoderTests/CombineTests.swift b/Tests/XMLCoderTests/CombineTests.swift index c3d4b747..a470a691 100644 --- a/Tests/XMLCoderTests/CombineTests.swift +++ b/Tests/XMLCoderTests/CombineTests.swift @@ -27,6 +27,12 @@ private struct Foo: Codable { var name: String } +final class CustomEncoder: XMLEncoder { + override func encode(_ value: T) throws -> Data where T : Encodable { + try self.encode(value, withRootKey: "bar", rootAttributes: nil, header: nil) + } +} + @available(iOS 13.0, macOS 10.15.0, tvOS 13.0, watchOS 6.0, *) final class CombineTests: XCTestCase { func testDecode() { @@ -51,5 +57,21 @@ final class CombineTests: XCTestCase { ) XCTAssertEqual(foo?.name, "Foo") } + + func testCustomEncode() { + var foo: Data? + _ = Just(Foo(name: "Foo")) + .encode(encoder: CustomEncoder()) + .sink( + receiveCompletion: { _ in }, + receiveValue: { + foo = $0 + } + ) + XCTAssertEqual( + String(data: foo!, encoding: .utf8)!, + "Foo" + ) + } } #endif From 84c33e77a57cd008c86321476f5e5a506d80fd76 Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkk669@users.noreply.github.com> Date: Thu, 21 May 2020 02:06:32 +0900 Subject: [PATCH 2/4] Avoid using implicit returns for older Swift --- Sources/XMLCoder/Encoder/XMLEncoder.swift | 2 +- Tests/XMLCoderTests/CombineTests.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/XMLCoder/Encoder/XMLEncoder.swift b/Sources/XMLCoder/Encoder/XMLEncoder.swift index de8f8c51..29665141 100644 --- a/Sources/XMLCoder/Encoder/XMLEncoder.swift +++ b/Sources/XMLCoder/Encoder/XMLEncoder.swift @@ -380,7 +380,7 @@ open class XMLEncoder { // MARK: - TopLevelEncoder open func encode(_ value: T) throws -> Data where T: Encodable { - try encode(value, withRootKey: nil, rootAttributes: nil, header: nil) + return try encode(value, withRootKey: nil, rootAttributes: nil, header: nil) } } diff --git a/Tests/XMLCoderTests/CombineTests.swift b/Tests/XMLCoderTests/CombineTests.swift index a470a691..47d60192 100644 --- a/Tests/XMLCoderTests/CombineTests.swift +++ b/Tests/XMLCoderTests/CombineTests.swift @@ -29,7 +29,7 @@ private struct Foo: Codable { final class CustomEncoder: XMLEncoder { override func encode(_ value: T) throws -> Data where T : Encodable { - try self.encode(value, withRootKey: "bar", rootAttributes: nil, header: nil) + return try self.encode(value, withRootKey: "bar", rootAttributes: nil, header: nil) } } From 175f5da39137ba1e807b8ea3ad5dcd92a306e4e2 Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkk669@users.noreply.github.com> Date: Thu, 21 May 2020 02:16:16 +0900 Subject: [PATCH 3/4] Hide a method for Combine if Combine cannot be imported --- Sources/XMLCoder/Encoder/XMLEncoder.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/XMLCoder/Encoder/XMLEncoder.swift b/Sources/XMLCoder/Encoder/XMLEncoder.swift index 29665141..09732c63 100644 --- a/Sources/XMLCoder/Encoder/XMLEncoder.swift +++ b/Sources/XMLCoder/Encoder/XMLEncoder.swift @@ -379,9 +379,11 @@ open class XMLEncoder { // MARK: - TopLevelEncoder + #if canImport(Combine) || canImport(OpenCombine) open func encode(_ value: T) throws -> Data where T: Encodable { return try encode(value, withRootKey: nil, rootAttributes: nil, header: nil) } + #endif } private extension String { From 18282b5515145500190dd817c9b0eab2b99188ed Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkk669@users.noreply.github.com> Date: Thu, 21 May 2020 02:18:20 +0900 Subject: [PATCH 4/4] Follow SwiftFormat --- Tests/XMLCoderTests/CombineTests.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/XMLCoderTests/CombineTests.swift b/Tests/XMLCoderTests/CombineTests.swift index 47d60192..e342f3fd 100644 --- a/Tests/XMLCoderTests/CombineTests.swift +++ b/Tests/XMLCoderTests/CombineTests.swift @@ -28,8 +28,8 @@ private struct Foo: Codable { } final class CustomEncoder: XMLEncoder { - override func encode(_ value: T) throws -> Data where T : Encodable { - return try self.encode(value, withRootKey: "bar", rootAttributes: nil, header: nil) + override func encode(_ value: T) throws -> Data where T: Encodable { + return try encode(value, withRootKey: "bar", rootAttributes: nil, header: nil) } }