5 // Created by Hori,Masaki on 2017/12/12.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 private func parseParameter(_ request: URLRequest) -> [String: String]? {
16 .removingPercentEncoding?
17 .components(separatedBy: "&")
18 .map { $0.components(separatedBy: "=") }
19 .filter { $0.count == 2 }
20 .reduce(into: [String: String]()) { (dict: inout [String: String], value: [String]) in
22 dict[value[0]] = value[1]
26 struct ParameterValue {
28 private let rawValue: String?
30 var int: Int? { return rawValue.flatMap { Int($0) } }
32 var double: Double? { return rawValue.flatMap { Double($0) } }
34 var string: String? { return rawValue }
38 guard let _ = rawValue else {
48 if let s = self.string?.lowercased() {
52 case "true", "yes", "t", "y": return true
62 var array: [ParameterValue] {
64 return rawValue?.components(separatedBy: ",").map { ParameterValue($0) } ?? []
67 var integerArray: [Int] {
69 return array.compactMap { $0.int }
72 var valid: Bool { return rawValue != nil }
74 init(_ rawValue: String?) {
76 self.rawValue = rawValue
82 private let rawValue: [String: String]
84 init(_ rawValue: [String: String]) {
86 self.rawValue = rawValue
89 init?(_ request: URLRequest) {
91 guard let paramList = parseParameter(request) else {
99 subscript(_ key: String) -> ParameterValue {
101 return ParameterValue(rawValue[key])
104 func map<T>(_ transform: (String, String) throws -> T) rethrows -> [T] {
106 return try rawValue.map(transform)
110 extension Parameter: Equatable {
112 public static func == (lhs: Parameter, rhs: Parameter) -> Bool {
114 return lhs.rawValue == rhs.rawValue