From dbd9c55bbbf94387c9d3fc37666bd412aa733e6d Mon Sep 17 00:00:00 2001 From: siemensikkema Date: Fri, 3 Sep 2021 10:40:45 +0200 Subject: [PATCH] Add support for indexed arrays --- Sources/MultipartKit/MultipartFormData.swift | 28 ++- .../MultipartKitTests/MultipartKitTests.swift | 186 +++++++++++++++--- 2 files changed, 187 insertions(+), 27 deletions(-) diff --git a/Sources/MultipartKit/MultipartFormData.swift b/Sources/MultipartKit/MultipartFormData.swift index 861751f9..6f0b8c55 100644 --- a/Sources/MultipartKit/MultipartFormData.swift +++ b/Sources/MultipartKit/MultipartFormData.swift @@ -53,7 +53,8 @@ extension MultipartFormData { private static func namedParts(from data: MultipartFormData, path: String? = nil) -> [MultipartPart] { switch data { case .array(let array): - return array.flatMap { namedParts(from: $0, path: path.map { "\($0)[]" }) } + return array.enumerated().flatMap { offset, element in + namedParts(from: element, path: path.map { "\($0)[\(offset)]" }) } case .single(var part): part.name = path return [part] @@ -85,10 +86,29 @@ private extension MultipartFormData { data.insert(part, at: path.dropFirst(), remainingNestingDepth: remainingNestingDepth - 1) } + func insertingPart(at index: Int?) -> MultipartFormData { + var array = self.array ?? [] + let count = array.count + let index = index ?? count + + switch index { + case count: + array.append(.empty) + case 0..