From c5c80318af89fc2d570453840f168565fcf16466 Mon Sep 17 00:00:00 2001 From: "byungmin.kang" Date: Thu, 21 Jul 2022 11:58:01 +0900 Subject: [PATCH] Add array to URLEncodedSerialization --- .../APIKit/Serializations/URLEncodedSerialization.swift | 8 ++++++++ .../BodyParametersType/URLEncodedSerializationTests.swift | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/Sources/APIKit/Serializations/URLEncodedSerialization.swift b/Sources/APIKit/Serializations/URLEncodedSerialization.swift index 1c13425d..7aad0a93 100644 --- a/Sources/APIKit/Serializations/URLEncodedSerialization.swift +++ b/Sources/APIKit/Serializations/URLEncodedSerialization.swift @@ -94,6 +94,14 @@ public final class URLEncodedSerialization { return "\(escape(key))" } + if let valueAsArray = value as? Array { + let escapedKeyForArray = escape(key) + return valueAsArray.map { (element: Any) -> String in + let elementAsString = (element as? String) ?? "\(element)" + return "\(escapedKeyForArray)=\(escape(elementAsString))" + }.joined(separator: "&") + } + let valueAsString = (value as? String) ?? "\(value)" return "\(escape(key))=\(escape(valueAsString))" } diff --git a/Tests/APIKitTests/BodyParametersType/URLEncodedSerializationTests.swift b/Tests/APIKitTests/BodyParametersType/URLEncodedSerializationTests.swift index 89702e4d..a839907c 100644 --- a/Tests/APIKitTests/BodyParametersType/URLEncodedSerializationTests.swift +++ b/Tests/APIKitTests/BodyParametersType/URLEncodedSerializationTests.swift @@ -10,6 +10,14 @@ class URLEncodedSerializationTests: XCTestCase { XCTAssertEqual(object?["key1"], "value1") XCTAssertEqual(object?["key2"], "value2") } + + func testObjectFromArray() { + let parameters: [String : Any] = ["foo": "bar", "array" : ["first", "second"]] + let serailizedString = URLEncodedSerialization.string(from: parameters) + XCTAssertTrue(serailizedString.contains("foo=bar")) + XCTAssertTrue(serailizedString.contains("array=first")) + XCTAssertTrue(serailizedString.contains("array=second")) + } func testInvalidFormatString() { let string = "key==value&"