Files
plexswift/Sources/Plexswift/internal/serialization/Parameters.swift
2024-03-18 14:51:32 -07:00

103 lines
3.5 KiB
Swift

// Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
import Foundation
struct SerializedParameter {
let name: String
let serialized: String?
}
protocol ParameterDefaults {
func defaultSerializedPathParameter(for key: String) throws -> String?
func defaultQueryParameter(for key: String) -> AnyValue?
}
// MARK: - Serialization Types
protocol PathParameterSerializable {
func serializedPathParameters(formatOverride: SerializableFormat?) throws -> [String: String]
}
protocol QueryParameterSerializable {
func serializedQueryParameters(with parameterDefaults: ParameterDefaults?, formatOverride: SerializableFormat?) throws -> [QueryParameter]
}
protocol HeaderParameterSerializable {
func serializedHeaderParameters() throws -> [SerializedParameter]
}
enum MultipartFormParameter {
case value(name: String, serialized: String?)
case file(name: String, filename: String?, data: Data?)
}
protocol MultipartFormBodySerializable {
func serializedMultipartFormParameters(formatOverride: SerializableFormat?) throws -> [MultipartFormParameter]
}
protocol FormBodySerializable {
func serializedFormParameters(formatOverride: SerializableFormat?) throws -> [SerializedParameter]
}
// MARK: - Models
func serializePathParameterSerializable(
_ pathParameterSerializable: PathParameterSerializable,
with format: SerializableFormat
) throws -> String {
let fields = try pathParameterSerializable
.serializedPathParameters(formatOverride: format)
.map { (key, value) in
SerializedParameter(name: key, serialized: value)
}
.sorted { a, b in
a.name < b.name
}
return serializeModel(with: fields, format: format)
}
func serializeQueryParameterSerializable(
_ queryParameterSerializable: QueryParameterSerializable,
with format: SerializableFormat
) throws -> String {
let fields = try queryParameterSerializable
.serializedQueryParameters(with: nil, formatOverride: format)
.compactMap { queryParameter -> SerializedParameter? in
guard let key = queryParameter.key.last else { return nil }
return SerializedParameter(name: key, serialized: queryParameter.serialized)
}
return serializeModel(with: fields, format: format)
}
func serializeModel(
with fields: [SerializedParameter],
format: SerializableFormat
) -> String {
return fields.map { field in
guard let serialized = field.serialized else { return nil }
if format.explode {
return "\(field.name)=\(serialized)"
} else {
return "\(field.name)\(format.separator)\(serialized)"
}
}.compactMap { $0 }.joined(separator: format.separator)
}
// MARK: - Maps
extension Dictionary: MultipartFormBodySerializable where Key == String, Value: Serializable {
func serializedMultipartFormParameters(formatOverride: SerializableFormat?) throws -> [MultipartFormParameter] {
return try map { key, value in
return .value(name: key, serialized: try value.serialize(with: formatOverride ?? .multipart))
}
}
}
extension Dictionary: FormBodySerializable where Key == String, Value: Serializable {
func serializedFormParameters(formatOverride: SerializableFormat?) throws -> [SerializedParameter] {
return try map { key, value in
return SerializedParameter(name: key, serialized: try value.serialize(with: formatOverride ?? .form(explode: false)))
}
}
}