OSDN Git Service

不要となっていたプロパティを削除
[kcd/KCD.git] / KCD / Parameter.swift
1 //
2 //  Parameter.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/12/12.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Foundation
10
11 private func parseParameter(_ request: URLRequest) -> [String: String]? {
12     
13     return request
14         .httpBody?
15         .utf8String?
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
21             
22             dict[value[0]] = value[1]
23     }
24 }
25
26 struct ParameterValue {
27     
28     private let rawValue: String?
29     
30     var int: Int? { return rawValue.flatMap { Int($0) } }
31     
32     var double: Double? { return rawValue.flatMap { Double($0) } }
33     
34     var string: String? { return rawValue }
35     
36     var bool: Bool? {
37         
38         guard let _ = rawValue else {
39             
40             return nil
41         }
42         
43         if let i = self.int {
44             
45             return i != 0
46         }
47         
48         if let s = self.string?.lowercased() {
49             
50             switch s {
51                 
52             case "true", "yes", "t", "y": return true
53                 
54             default: return false
55                 
56             }
57         }
58         
59         return false
60     }
61     
62     var array: [ParameterValue] {
63         
64         return rawValue?.components(separatedBy: ",").map { ParameterValue($0) } ?? []
65     }
66     
67     var integerArray: [Int] {
68         
69         return array.compactMap { $0.int }
70     }
71     
72     var valid: Bool { return rawValue != nil }
73     
74     init(_ rawValue: String?) {
75         
76         self.rawValue = rawValue
77     }
78 }
79
80 struct Parameter {
81     
82     private let rawValue: [String: String]
83     
84     init(_ rawValue: [String: String]) {
85         
86         self.rawValue = rawValue
87     }
88     
89     init?(_ request: URLRequest) {
90         
91         guard let paramList = parseParameter(request) else {
92             
93             return nil
94         }
95         
96         self.init(paramList)
97     }
98     
99     subscript(_ key: String) -> ParameterValue {
100         
101         return ParameterValue(rawValue[key])
102     }
103     
104     func map<T>(_ transform: (String, String) throws -> T) rethrows -> [T] {
105         
106         return try rawValue.map(transform)
107     }
108 }
109
110 extension Parameter: Equatable {
111     
112     public static func == (lhs: Parameter, rhs: Parameter) -> Bool {
113         
114         return lhs.rawValue == rhs.rawValue
115     }
116 }