iOSApplicationTemplate icon indicating copy to clipboard operation
iOSApplicationTemplate copied to clipboard

Parameter Encoding Get

Open minsOne opened this issue 4 years ago • 0 comments

import Foundation
import DictionaryCoding

/// Note: This relies on the DictionaryCoding package https://github.com/elegantchaos/DictionaryCoding
struct QueryParamEncoder {
    func encode<T: Encodable>(_ item: T) throws -> String {
        let encoder = DictionaryEncoder()
        let encoded: [String: Any] = try encoder.encode(item)
        let queryParams = encodeDictionary(encoded)
        
        return "?\(queryParams)"
    }
    
    private func encodeDictionary(_ dictionary: [String: Any]) -> String {
        return dictionary
            .compactMap { (key, value) -> String? in
                if value is [String: Any] {
                    if let dictionary = value as? [String: Any] {
                        return encodeDictionary(dictionary)
                    }
                }
                else {
                    return "\(key)=\(value)"
                }
                
                return nil
            }
            .joined(separator: "&")
    }
}

minsOne avatar Jul 14 '21 04:07 minsOne