// 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))) } } }