Files
plexswift/Sources/Plexswift/internal/serialization/Form.swift
2024-04-11 11:10:38 -05:00

59 lines
2.3 KiB
Swift

// Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
import Foundation
func multipartContentType(with boundary: String) -> String {
return "multipart/form-data; boundary=\(boundary)"
}
func serializeMultipartFormData(with multipartFormBodySerializable: MultipartFormBodySerializable) throws -> (boundary: String, data: Data) {
let boundary = UUID().uuidString
var data = Data()
let parameters = try multipartFormBodySerializable.serializedMultipartFormParameters(formatOverride: nil)
parameters.forEach { parameter in
switch parameter {
case .value(name: let name, serialized: let serialized):
guard let serialized else { return }
data.append(utf8String: "--\(boundary)\r\n")
data.append(utf8String: "Content-Disposition: multipart/form-data; name=\"\(name)\"\r\n")
data.append(utf8String: "Content-Type: text/plain\r\n\r\n")
data.append(utf8String: "\(serialized)\r\n")
case .file(name: let name, filename: let filename, data: let content):
guard let filename, let content, let contentString = String(data: content, encoding: .ascii) else { return }
data.append(utf8String: "--\(boundary)\r\n")
data.append(utf8String: "Content-Disposition: multipart/form-data; name=\"\(name)\"; filename=\"\(filename)\"\r\n")
data.append(utf8String: "Content-Type: text/plain\r\n\r\n")
data.append(utf8String: "\(contentString)\r\n")
}
}
data.append(utf8String: "--\(boundary)--")
return (boundary: boundary, data: data)
}
func serializeFormData(with formBodySerializable: FormBodySerializable) throws -> Data? {
let encoded = (try formBodySerializable.serializedFormParameters(formatOverride: nil))
.compactMap { parameter -> (String, String)? in
guard let serialized = parameter.serialized else { return nil }
return (parameter.name, serialized)
}
.map { (name, serialized) in
return "\(name)=\(serialized)"
}
.joined(separator: "&")
return encoded.data(using: .utf8)
}
fileprivate extension Data {
mutating func append(utf8String: String) {
if let data = utf8String.data(using: .utf8) {
append(data)
}
}
}