mirror of
https://github.com/LukeHagar/plexswift.git
synced 2025-12-06 20:57:46 +00:00
103 lines
3.5 KiB
Swift
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)))
|
|
}
|
|
}
|
|
}
|