diff --git a/Sources/MultipartKit/MultipartFormData.swift b/Sources/MultipartKit/MultipartFormData.swift index 2785e72c..c1b6782f 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] @@ -65,6 +66,7 @@ extension MultipartFormData { return [] } } +} private enum MultipartFormDataError: Error { case nestingLevelExceeded @@ -88,10 +90,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..